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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           66 次  |  
        
|   最近记录:  |