| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 491 人关注过本帖
标题:谁能解释一下虚基类。
只看楼主 加入收藏
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
结帖率:78.26%
收藏
已结贴  问题点数:20 回复次数:6 
谁能解释一下虚基类。
在我们的书本里边只是这样说:一类不能被多次说明为一个派生类的直接基类。
举的例子不是很明白,哪位懂的帮我解释一下这句话。谢谢~~
搜索更多相关主题的帖子: 书本 
2011-05-03 13:11
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:13 
虚基类作用:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。在引用这些同名的成员时,必须在派生类对象名后增加直接基类名,以避免产生二义性,使其惟一地标识一个成员。
在一个类中保留间接共同基类的多份同名成员,这种现象是人们不希望出现的。
C++提供虚基类(virtual base class)的方法,使得在继承间接共同基类时只保留一份成员。
虚基类声明方式:
class 派生类名:virtual 继承方式 基类名
经过这样的声明后,当基类通过多条派生路径被一个派生类继承时,该派生类只继承该基类一次。
例如:
class A//声明基类A
{

};
class B :virtual public A //声明类B是类A的公用派生类,A是B的虚基类
{

};
class C :virtual public A //声明类C是类A的公用派生类,A是C的虚基类
{

};
注意:虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。因为一个基类可以在生成一个派生类时作为虚基类,而在生成另一个派生类时不作为虚基类。
为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中声明为虚基类。否则仍然会出现对基类的多次继承。
2011-05-03 13:37
donggegege
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:125
专家分:368
注 册:2011-5-1
收藏
得分:3 
为防止在调用类成员时,因为有其它类也含有同样的变量时,可能发生二义性的情况
2011-05-03 14:03
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 2楼 Pirelo
说的真好
2011-05-03 17:01
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
正好复习复习语法。这个语法点实际用的不是很多。

现在普遍认为,继承应该是单支的。不应该出现,或尽量减少出现一个类有多个基类的情况。
2011-05-03 18:52
georgee
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-2-15
收藏
得分:0 
以下是引用pangding在2011-5-3 18:52:44的发言:

正好复习复习语法。这个语法点实际用的不是很多。

现在普遍认为,继承应该是单支的。不应该出现,或尽量减少出现一个类有多个基类的情况。
哦 原来是这样,我正在看多继承  看来只需要了解而在实际编程中应尽量避免吧?
2011-05-04 17:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
嗯,我是这意见。不过只是一家之言。
你可以自己多查点资料,也许不同的人有不同的说法。
2011-05-04 18:30
快速回复:谁能解释一下虚基类。
数据加载中...
 
   



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

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