【Linux基础】多继承的构造与析构
2013-06-09 11:44
323 查看
[align=left]一个派生类可以有多于一个的基类,称之为多继承。[/align] [align=left]派生类构造函数的执行顺序:[/align] [align=left](1)先按着声明的顺序(从左至右)依次调用各基类的构造函数。[/align] [align=left](2)然后按照数据成员(包括内嵌对象、常量、引用等必须初始化的成员)的声明顺序,依次调用数据成员的构造函数或初始化数据成员。[/align] [align=left](3)最后执行派生类构造函数的函数体。[/align] [align=left]派生类析构顺序:[/align] [align=left](1)先执行派生类的析构函数。[/align] [align=left](2)然后按着内嵌对象声明的相反顺序,依次调用内嵌对象的析构函数。[/align] [align=left](3)最后按基类声明的相反顺序调用各基类的析构函数。[/align] [align=left][/align] [align=left]例4 多继承派生类的构造过程与析构过程。[/align] [align=left]#include <iostream.h>[/align] class CBase1 [align=left]{[/align] [align=left]protected:[/align] [align=left]int b;[/align] [align=left]public:[/align] [align=left]CBase1(int x=0)[/align] [align=left]{[/align] [align=left]b=x;[/align] [align=left]cout << "Construct CBase1! " << b <<endl;[/align] [align=left]}[/align] [align=left]~CBase1()[/align] [align=left]{[/align] [align=left]cout << "Destruct CBase1! " << b <<endl;[/align] [align=left]}[/align] }; class CBase2 [align=left]{[/align] [align=left]protected:[/align] [align=left]int b;[/align] [align=left]public:[/align] [align=left]CBase2(int x=0)[/align] [align=left]{[/align] [align=left]b=x;[/align] [align=left]cout << "Construct CBase2! " << b <<endl;[/align] [align=left]}[/align] [align=left]~CBase2()[/align] [align=left]{[/align] [align=left]cout << "Destruct CBase2! " << b <<endl;[/align] [align=left]}[/align] [align=left]};[/align] class CDerived : public CBase1,private CBase2 [align=left]{[/align] [align=left]protected:[/align] [align=left]CBase1 b1;[/align] [align=left]CBase2 b2;[/align] [align=left]int d;[/align] [align=left]public:[/align] [align=left]CDerived(int x,int y, int z): :b1(y),CBase2(y),b2(z),CBase1(x)[/align] [align=left]{[/align] [align=left]d=z;[/align] [align=left]cout << "Construct CDerived! " << d <<endl;[/align] [align=left]}[/align] [align=left]~CDerived()[/align] [align=left]{[/align] [align=left]cout << "Destruct CDerived! " << d <<endl;[/align] [align=left]}[/align] [align=left]};[/align]
[align=left]{[/align] [align=left]CDerived d1(1,2,3);[/align] } [align=left][/align] [align=left]程序运行结果为:[/align] [align=left]Construct CBase1 1[/align] [align=left]Construct CBase2 2[/align] [align=left]Construct CBase1 2[/align] [align=left]Construct CBase2 3[/align] [align=left]Construct CDerived! 3[/align] [align=left]Denstruct CDerived! 3[/align] [align=left]Denstruct CBase2! 3[/align] [align=left]Denstruct CBase1! 2[/align] [align=left]Denstruct CBase2! 2[/align] Denstruct CBase1! 1 |
http://www.weicedu.com/forum.php?mod=viewthread&tid=84&fromuid=4
(出处: http://www.weicedu.com/)
相关文章推荐
- c++超基础:继承的构造与析构(赋值兼容性原则)
- 【Linux基础】派生类的构造过程和析构过程
- C++学习笔记--继承中的构造与析构
- 构造、析构、继承对对象的影响
- 构造和析构的基础知识
- 2018/01/08JAVA 基础 / 接口与继承/Java关键词:变量引用 super 调用父类对象方法/构造方法【或者访问父类对象属性】的方式归纳
- C++ 继承和组合混搭下的构造和析构调用原则
- C++(34)继承中的构造和析构
- 第46课 - 继承中的构造与析构
- 构造、析构、继承对对象的影响
- 27、不一样的C++系列--继承的构造与析构
- C++ 继承的构造与析构
- 关于C++继承体系中类的构造与析构的顺序【转贴】
- 第46课 继承中的构造与析构
- 【Linux基础】C的构造类型
- C++继承中的构造与析构
- 单一继承多次与多重继承的构造与析构
- (多)继承中的构造与析构
- 继承中的构造和析构 继承和组合混搭情况下,构造函数、析构函数调用顺序研究
- 【Linux基础】类的继承方式