4-1 C++ 继承与派生

题目

创建一个从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的构造函数。

析构时,先构造的后析构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值