一个简单关于派类C++程序

来源:百度知道 编辑:UC知道 时间:2024/05/31 09:11:34
请大家看下面的程序推断出运行结果!最后解释为什么得出那样的结果.一定要说明原因啊!
#include<iostream.h>
class base1
{
public:
base1()
{cout<<"class base1"<<endl;}
};
class base2
{
public:
base2()
{cout<<"class base2"<<endl;}
};
class Level1:public base2,virtual public base1
{
public:
Level1()
{cout<<"class Level1"<<endl;}
};
class Level2:public base2,virtual public base1
{
public:
Level2()
{cout<<"class Level2"<<endl;}
};
class Toplevel:public Level1,virtual public Level2
{
public:
Toplevel()
{cout<<"class Toplevel"<<endl;}
};
void main()
{
Toplevel obj;
}

class base1
class base2
class Level2
class base2
class Level1
class Toplevel

在类派生的基类前出现 virtual 修饰符,表示它是作为一个虚基类被继承,虚基类的简单点来讲,就是如果一个类通过多条途径继承自它,那么系统对虚基类子对象只初始化一次,即只执行一次构造函数。
在构造函数的初始化顺序中,当在一个成员初始化列表中同时出现对虚基类和非虚基类构造函数的调用时,虚基类的构造函数先于非虚基类的构造函数执行。

理解上面这两点,就可以理解输出了。

class base1
class base2
class Level2
是 Level2 类族构造函数顺序,因为virtual public Level2 所以才先于类 Level1 的构造函数执行
class base2
class Level1
接下来执行 Level1 类族构造函数,但是类 base1 是虚基类,所以只初始化一次,因此没有 class base1
最后初始化类 Toplevel
这也符合,从基类开始构造的原则

如果想详细了解虚基类的知识,请看
http://baike.baidu.com/view/1267123.html?wtp=tt

C++的多态性问题,不难的,自己多看看书,相信你很快能理解的,要是再不懂的话,就再提问吧!

欢迎在线讨论:

多态性。看书!