您的位置:首页 > 运维架构 > Linux

【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]

构造函数执行顺序:先调用基类CBase1构造函数,再调用基类CBase2构造函数,然后调用内嵌对象b1构造函数,再调用内嵌对象b2的构造函数,最后执行CDerived类本身的构造函数体。析构过程与构造过程恰好相反。

void main()
[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
本文转载于唯C教育,【Linux基础】多继承的构造与析构

http://www.weicedu.com/forum.php?mod=viewthread&tid=84&fromuid=4

(出处: http://www.weicedu.com/)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: