设为首页 加入收藏

TOP

4.5.1 派生类构造函数和析构函数的执行顺序
2013-10-07 01:16:40 来源: 作者: 【 】 浏览:66
Tags:4.5.1 派生 构造 函数 执行 顺序

4.5  派生类的构造函数与析构函数

派生类继承了基类的成员,实现了代码的重复利用,但是继承的目的更主要的是功能的扩充。基类的构造函数和析构函数不能被继承。如果在派生类中需要对新增加的成员进行初始化,则需要加入派生类的构造函数。同样派生类也需要添加析构函数来实现一些结束工作。

4.5.1  派生类构造函数和析构函数的执行顺序

当创建对象时,编译系统会自动调用构造函数。当撤销对象时,编译系统会自动调用析构函数。当创建派生类的对象时,首先执行基类的构造函数,然后执行派生类的构造函数。当撤销对象时,则先执行派生类的析构函数,然后再执行基类的析构函数。

【示例4.20】 定义基类和派生类,查看构造函数和析构函数的调用次序。

  1. #include"iostream.h"  
  2. class A                             //定义一个类  
  3. {  
  4. public:  
  5.     A()                             //类的构造函数  
  6.     {cout<<"基类的构造函数"<<endl;}  
  7.     ~A()                            //类的析构函数  
  8.     {cout<<"基类的析构函数"<<endl;}  
  9. };  
  10. class B:public A                    //派生类  
  11. {  
  12. public:  
  13.     B()                             //派生类的构造函数  
  14.     {cout<<"派生类的构造函数"<<endl;}  
  15.     ~B()                            //派生类的析构函数  
  16.     {cout<<"派生类的析构函数"<<endl;}  
  17. };  
  18. void main()  
  19. {  
  20.     B p;                            //派生类的对象  
  21. }  

程序输出结果如下所示。

  1. 基类的构造函数  
  2. 派生类的构造函数  
  3. 派生类的析构函数  
  4. 基类的析构函数 

分析:在定义对象时,系统会自动调用构造函数,而撤销对象时则会调用析构函数。在派生类中需要对基类的构造函数和析构函数进行处理。通过上面的例子可以清楚地看到在派生类中构造函数和析构函数的调用次序。如果有层派生时,首先调用基类的构造函数,然后逐层向上调用构造函数。析构函数的执行顺序与构造函数的调用次序相反。

【示例4.21】 多层派生构造函数和析构函数的执行次序。

  1. #include"iostream.h"  
  2. class A                             //定义类  
  3. {  
  4. public:  
  5.     A()  
  6.     {cout<<"基类的构造函数"<<endl;}  
  7.     ~A()  
  8.     {cout<<"基类的析构函数"<<endl;}  
  9. };  
  10. class B:public A                    //从A类派生  
  11. {  
  12. public:  
  13.     B()  
  14.     {cout<<"派生类B的构造函数"<<endl;}  
  15.     ~B()  
  16.     {cout<<"派生类B的析构函数"<<endl;}  
  17. };  
  18. class C:public B                    //从B类派生,而B从A派生  
  19. {  
  20. public:  
  21.     C()  
  22.     {cout<<"派生类C的构造函数"<<endl;}  
  23.     ~C()  
  24.     {cout<<"派生类C的析构函数"<<endl;}  
  25. };  
  26. void main()  
  27. {  
  28.     C c;                            //定义对象  

程序输出结果如下:

  1. 基类的构造函数  
  2. 派生类B的构造函数  
  3. 派生类C的构造函数  
  4. 派生类C的析构函数  
  5. 派生类B的析构函数  
  6. 基类的析构函数 
通过上面的例子可以清楚地看到多层派生时的构造函数和析构函数依次被调用的顺序。在多层派生的情况下需要从底层开始执行构造函数,撤销对象时,则从高层撤销对象。


回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.2.1 构造函数 下一篇4.4.2 基类成员在派生类中访问属性

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: