Jac*_*son 1 c++ inheritance abstract-class
这是我的代码:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Sub1() = 0;
virtual void Sub2();
virtual void Sub3();
void Sub4();
};
class A : public Base
{
public:
void Sub2();
void Sub4();
};
class B : public A
{
public:
virtual void Sub1();
void Sub2();
};
class C : public Base
{
public:
virtual void Sub1();
virtual void Sub4();
};
void Base::Sub2()
{
cout << "Hello from Base::Sub2()" << endl;
}
void Base::Sub3()
{
cout << "Hello from Base::Sub3()" << endl;
Sub1(); // DONT MISS THIS CALL IN YOUR ANSWER
}
void Base::Sub4()
{
cout << "Hello from Base::Sub4()" << endl;
}
void A::Sub2()
{
cout << "Hello from A:Sub2()" << endl;
}
void A::Sub4()
{
cout << "Hello from A:Sub4()" << endl;
}
void B::Sub1()
{
cout << "Hello from B:Sub1()" << endl;
}
void B::Sub2()
{
cout << "Hello from B:Sub2()" << endl;
}
void C::Sub1()
{
cout << "Hello from C:Sub1()" << endl;
}
void C::Sub4()
{
cout << "Hello from C:Sub4()" << endl; //error used to say from Sub2
}
void Sub(Base& x)
{
x.Sub1();
x.Sub2();
x.Sub3();
}
void AnotherSub(A& a)
{
a.Sub1();
a.Sub2();
a.Sub4();
}
int main()
{
A a; // wont compile
B b;
C c;
Sub(a);
Sub(b);
Sub(c);
AnotherSub(b);
}
Run Code Online (Sandbox Code Playgroud)
我在最后遇到了麻烦,A a;显然是Sub(a);因为 a 不能使用,但在最后,它说,“错误:无法将变量 'a' 声明为抽象类型 'A'” 任何帮助将不胜感激, 谢谢。
--- 同样,如果有帮助,则输出没有 A a; 工作,看起来像:
Hello from B:Sub1()
Hello from B:Sub2()
Hello from Base::Sub3()
Hello from B:Sub1()
Hello from C:Sub1()
Hello from Base::Sub2()
Hello from Base::Sub3()
Hello from C:Sub1()
Hello from B:Sub1()
Hello from B:Sub2()
Hello from A:Sub4()
Run Code Online (Sandbox Code Playgroud)
这条线进入你的班级Base:
virtual void Sub1() = 0;
Run Code Online (Sandbox Code Playgroud)
Base如果您不实现该功能Sub1,则将该类或任何扩展它的类设为抽象类,这就是您的类的情况A。
您不能创建抽象类的实例,因为它具有没有实现的方法,这意味着无法调用。这种类只能通过继承来使用。
所以你需要直接实现它,Base或者A如果你想创建A实例。