Jim*_*ani 3 c++ virtual initialization function
class A{
public: virtual void getName() = 0;
};
class B: public A{
public:
B(int a){
cout<< "B Name : " << a <<endl;
}
void getName() override { cout << "Class B" << endl; }
};
class C: public B{
public:
C(int a){
cout<< "C Name : " << a <<endl;
}
void getName() override { cout << "Class C" << endl; }
};
int main()
{
B *b = new B(10);
b->getName();
C *c = new C(20);
c->getName();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建Class B和C.b 的对象,但这给了我这样的错误
main.cpp:31:15: error: no matching function for call to ‘B::B()’
C(int a){
^
main.cpp:22:9: note: candidate: B::B(int)
B(int a){
^
Run Code Online (Sandbox Code Playgroud)
谁能向我解释为什么会这样?为什么不创建类对象?
此问题与virtual功能无关。
您必须在成员初始值设定项列表中指定B应使用的哪个构造函数来显式初始化基础子对象,否则,将使用的默认构造函数,但没有一个。(请注意,如果有一个用户定义的构造函数,则不会为生成默认的构造函数。)BBBBintB
对于无法默认初始化的成员(例如引用成员和const限定类型的成员),必须指定成员初始化程序。
例如
C(int a) : B(a) {
// ^^^^^^
cout<< "C Name : " << a <<endl;
}
Run Code Online (Sandbox Code Playgroud)