【发布时间】:2015-12-06 23:09:53
【问题描述】:
我正在尝试在我的书中做一个作业,但我不理解输出。当程序中的主要代码运行时,输出为:
B::B(3)
B::B() //为什么会这样输出
B::B(-3)
D::D(3)
它首先调用B::B(int n) {},然后调用B::B() {},然后是我得到的接下来的两行。所以程序调用了第一个程序,因为它被声明为函数中的类 A 的构造函数并且它必须赋值,我没有得到的是输出第 2 行,为什么 B::B() {} 甚至被调用?它作为构造函数被调用,但不应该只调用带参数的构造函数?
class B {
public:
B(); //why is this called?
B(int n);
};
// Definitions of B
B::B() {
cout << "B::B()\n";
}
B::B(int n) {
cout << "B::B(" << n << ")\n";
}
class D : public B {
public:
D();
D(int n);
private:
B b;
};
// Definitions of D
D::D() {
cout << "D::D()\n";
}
D::D(int n) : B(n) {
b = B(-n);
cout << "D::D("<< n <<")\n";
}
int main(int argc, const char * argv[]) {
// insert code here...
D d(3);
return 0;
}
【问题讨论】:
标签: c++ class inheritance constructor