tal*_*099 2 c++ inheritance constructor
我收到错误:没有适合 B 的默认构造函数。但是,当我给出参数 ii 并且不想调用默认构造函数时,我不明白为什么编译器要调用默认构造函数。
#include <iostream>
using namespace std;
class A {
int i;
public:
A(int ii) { i = ii; cout << "Constructor for A\n"; }
~A() { cout << "Destructor for A\n"; }
void f() const{}
};
class B {
int i;
public:
B(int ii) { i = ii; cout << "Constructor for B\n"; }
~B() { cout << "Destructor for B\n"; }
void f() const{}
};
class C:public B {
A a;
public:
C() { cout << "Constructor for C\n"; }
~C() { cout << "Destructor for C\n"; }
void f() const {
a.f();
B::f();
}
};
class D:public B {
C c;
public:
D(int ii) { B(ii); cout << "Constructor for D\n"; }
~D() { cout << "Destructor for D\n"; }
};
int main() {
D d(47);
}
Run Code Online (Sandbox Code Playgroud)
您的父构造函数应该在初始化列表中调用:
class D:public B {
C c;
public:
D(int ii) : B(ii)/* <- */ { cout << "Constructor for D\n"; }
~D() { cout << "Destructor for D\n"; }
};
Run Code Online (Sandbox Code Playgroud)
请注意 /* <- */ 注释。这需要改变。
您现在正在做的是在 D 类构造函数中创建 B() 的实例,该实例未被使用:
D(int ii) { B(ii); /* <- useless*/ }
Run Code Online (Sandbox Code Playgroud)