| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 611 人关注过本帖
标题:求高手,以下程序运行结果以及具体过程??????
只看楼主 加入收藏
山之子
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-10-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
求高手,以下程序运行结果以及具体过程??????
#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;
}
搜索更多相关主题的帖子: 结果 运行 
2010-10-31 13:45
shafeilong
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:236
专家分:1434
注 册:2009-3-21
收藏
得分:0 
溯本追源  要找到这个人是谁,就必须翻开户口,找到他老爸老妈,鉴定下是不是亲生的 往祖宗一直找
然后取他们的血液,一步一步下来,OK 找到了
2010-10-31 21:51
shafeilong
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:236
专家分:1434
注 册:2009-3-21
收藏
得分:5 
base 1
base 2
level2
base2
level1
toplevel1
收到的鲜花
  • 山之子2010-11-01 15:55 送鲜花  3朵   附言:我很赞同
2010-10-31 21:52
山之子
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-10-31
收藏
得分:0 
回复 3楼 shafeilong
能不能告诉我,这是为什么啊???
2010-11-01 15:49
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:15 
首先你要明确3点,
构造是从派生类的基类优先开始的
根据编辑器不同对于子类派生的多个派生基类采取从右往左(或从左往右)
虚拟派生不会重复构造基类,而会产生一个指针,该指针指向虚基类表(不是虚函数表),当然根据编辑器的不同采取的方式不同

在VS2008 从右往左 优先 virtual public Level2
而Level2 派生于public Base2,virtual public Base1
接着根据以上规则 :优先构造Base1(产生一指针,指向虚基类表,发现不存在Base1实例,则构造Base1),再Base2,然后在Level2本身

Level2完了 初始化public Level1
Level1派生于 public Base2,virtual public Base1
由于Base1是虚拟派生的那么产生一个指针,该指针指向虚基类表,发现Base1以存在一个实例(也就是已经被构造了一次)
则不在重复构造Base1,  而Base2不是虚拟派生,则构造Base2,然后构造Level1
最后toplevel1

具体相关知识你可以参照C++面向对象模型里的构造语意学




[ 本帖最后由 hahayezhe 于 2010-11-2 09:10 编辑 ]
收到的鲜花
  • 山之子2010-11-04 12:24 送鲜花  3朵   附言:我很赞同
2010-11-02 09:08
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:0 
5楼回答正确。
收到的鲜花
  • 山之子2010-11-04 12:24 送鲜花  2朵   附言:我很赞同
2010-11-02 20:27
永会
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2011-3-10
收藏
得分:0 
class Base1
class Base2
class Level2
class Base2
class Level1
class TopLevel
2011-04-17 23:28
永会
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2011-3-10
收藏
得分:0 
class Base1
class Base2
class Level2
class Base2
class Level1
class TopLevel
2011-04-17 23:28
wina1984
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-7
收藏
得分:0 
HR发现这个帖子很不错,有换工作的意向么?
jiamuwang@
2011-04-22 10:24
快速回复:求高手,以下程序运行结果以及具体过程??????
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025808 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved