构造和析构的顺序

转自: http://www.nowcoder.com/test/question/done?tid=419355&qid=15301#summary
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# include <iostream>
using namespace std;
class A  
{  
public :  
     A()  {  cout<< "create A" <<endl;   }  
     A( const A& other){ cout<< "copy A" <<endl;}  //复制构造函数
     ~A() {    cout<< "~A" <<endl;   }  
}; 
class C
{
public :
     C()  {  cout<< "create C" <<endl;   } 
     C( const A& other){ cout<< "copy C" <<endl;}  //复制构造函数
     ~C() {    cout<< "~C" <<endl;   }  
};
class B: public A  
{  
public :  
     B()
     {  
         cout<< "create B" <<endl;
     }  
     ~B()  
     {  
         cout<< "~B" <<endl;  
     }  
private :  
     C _a; 
};  
       
int main( void )  
{
         B b; 
         cout<< "------------------------" <<endl;
}
 
    
上面的输出结果为

create A
create C
create B
------------------------
~B
~C
~A

先构造父类A,再构造成员变量C,最后才是构造自己B


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class A  
{  
public :  
     A()  {     }  
     ~A() {    cout<< "~A" <<endl;   }  
};  
   
class B: public A  
{  
     public :  
         B(A &a):_a(a)  
         {  
             
         }  
         ~B()  
         {  
             cout<< "~B" <<endl;  
         }  
     private :  
         A _a;  
     };  
       
int main( void )  
  {  
         A a;        //很简单,定义a的时候调用了一次构造函数  
         B b(a); 
}

1 先构造 A ,2 再继承父类构造A,3 拷贝构造b的成员A _a  , 4 在构造B

所以析构 ~B ~A ~A ~A

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值