含对象成员类的构造顺序

源程序:

#include <iostream>

using namespace std;

class A
{
private:
 int m;
public:
 A(){ cout<<"In A's constructor..."<<endl;}
 ~A(){ cout<<"In A's destructor..."<<endl;}
};
class B
{
private:
 A a;
 int n;
public:
 B(){cout<<"In B's constructor..."<<endl;}
 ~B(){cout<<"In B's destructor..."<<endl;}
};
class C
{
private:
 B b;
 A a;
 int p;
public:
 C():a(),b(){cout<<"In C's constructor..."<<endl;}
 ~C(){cout<<"In C's destructor..."<<endl;}
};

void main()

{

C c;

cout<<"back in main..."<<endl;
}

1、当主函数运行时,遇到要创建C类的对象,于是调用其构造函数C(),该构造函数启动时,首先分配对象空间(包含一个A对象、一个B对象和一个int型数据),然后根据在类中声明的对象成员的次序依次调用其其构造函数(而不是根据它们在成员初始化列表中的说明次序进行调用)。这里先调用B对象的构造函数(B类中包含A类的对象成员,所以也需要先调用A类的构造函数),再调用A类的构造函数,最后调用C类的构造函数。析构函数的调用次序是:先调用本身类的析构函数,再调用成员对象类的析构函数。如果有多个成员对象,则成员对象析构函数的调用次序与它们的构造函数的调用次序正好相反。
2、与变量定义类似,在用默认构造函数创建对象时,如果创建的对象时全局的或者时静态的,则对象的位模式全为0,否则对象值时随机的。

输出:

   In A's constructor...
   In B's constructor...
   In A's constructor...
   In C's constructor...
   back in main...
   In C's destructor...
   In A's destructor...
   In B's destructor...
   In A's destructor...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值