C_and_CPP 版 (精华区)

发信人: pigpig (平和堂的猪挂头), 信区: C_and_CPP
标  题: 涉及到虚基类时对象构造函数调用顺序zz
发信站: 哈工大紫丁香 (Mon Feb 23 16:38:05 2004), 站内信件

如果一个类有多个基类,基类的构造函数在继承类的构造函数之前被调用。基类的构造函
数以被声明的顺序被调用。下面是一个例子:

class Y {...} 
class X : public Y {...} 
X one; 

构造函数的调用顺序是下面的顺序:

Y(); // 基类的构造函数
X(); // 继承类的构造函数

对于多基类的情况,下面是一个例子:

class X : public Y, public Z 
X one;

构造函数以声明的次序调用。

Y(); // 基类构造函数首先被调用
Z(); 
X(); 

虚基类的构造函数在任何非虚基类构造函数前调用。如果构造中包括多个虚基类,它们的
调用顺序以声明顺序为准。如果虚类是由非虚类派生而来,那非虚类的构造函数要先被调
用。下面是一个例子:

class X : public Y, virtual public Z 
X one; 

调用顺序如下:

Z(); // 虚基类初始化
Y(); // 非虚基类
X(); // 继承类

下面是一个复杂的例子:

class base; 
class base2; 
class level1 : public base2, virtual public base; 
class level2 : public base2, virtual public base; 
class toplevel : public level1, virtual public level2; 
toplevel view;

构造函数调用顺序如下:

base(); // 虚基类仅被构造一次
base2(); 
level2(); // 虚基类
base2();
level1();
toplevel();

如果类继承中包括多个虚基类的实例,基类只被初始化一次。


--
我是一只小小小小猪,想要跑却怎么也跑不快

※ 来源:.哈工大紫丁香 bbs.hit.edu.cn [FROM: 219.217.227.45]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.292毫秒