题目
创建一个从B继承并具有类C成员对象的类D。添加代码以显示何时调用构造函数和析构函数。
代码
#include <iostream>
using namespace std;
class A {
int i;
public:
A(int ii) : i(ii) {cout << "A构造函数调用"<<endl;}
~A() {cout << "~A析构函数调用"<<endl;}
void f() const {}
};
class B {
int i;
public:
B(int ii) : i(ii) {cout << "B构造函数调用"<<endl;}
~B() {cout << "~B析构函数调用"<<endl;}
void f() const {}
};
class C : public B
{
A a;
public:
C(int ii) : B(ii), a(ii) {cout << "C构造函数调用"<<endl;}
~C() {cout << "~C析构函数调用"<<endl;}
void f() const {
a.f();
B::f();
}
};
class D : public B
{
public:
D (int ii): B(ii), cc(ii){ cout << "D构造函数调用"<<endl;}
~D (){ cout << "~D析构函数调用"<<endl;}
private:
C cc;
};
int main() {
D dd(11);
}
结果
D公有继承B,调用D的构造函数,则会先调用B的构造函数。
又因为D中有C类的成员对象,故会调用C的构造函数。而C也继承自B,故又会调用B的构造函数。
C中又有A的成员对象,故调用A的构造函数。
之后C调用C的构造函数。
最后是D的构造函数。
析构时,先构造的后析构。