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)
页面执行时间:3.230毫秒