注册 登录
编程论坛 C++教室

谁能解释一下虚基类。

棉雨 发布于 2011-05-03 13:11, 491 次点击
在我们的书本里边只是这样说:一类不能被多次说明为一个派生类的直接基类。
举的例子不是很明白,哪位懂的帮我解释一下这句话。谢谢~~
6 回复
#2
Pirelo2011-05-03 13:37
虚基类作用:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。在引用这些同名的成员时,必须在派生类对象名后增加直接基类名,以避免产生二义性,使其惟一地标识一个成员。
在一个类中保留间接共同基类的多份同名成员,这种现象是人们不希望出现的。
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的虚基类
{

};
注意:虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。因为一个基类可以在生成一个派生类时作为虚基类,而在生成另一个派生类时不作为虚基类。
为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中声明为虚基类。否则仍然会出现对基类的多次继承。
#3
donggegege2011-05-03 14:03
为防止在调用类成员时,因为有其它类也含有同样的变量时,可能发生二义性的情况
#4
棉雨2011-05-03 17:01
回复 2楼 Pirelo
说的真好
#5
pangding2011-05-03 18:52
正好复习复习语法。这个语法点实际用的不是很多。

现在普遍认为,继承应该是单支的。不应该出现,或尽量减少出现一个类有多个基类的情况。
#6
georgee2011-05-04 17:21
以下是引用pangding在2011-5-3 18:52:44的发言:

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

现在普遍认为,继承应该是单支的。不应该出现,或尽量减少出现一个类有多个基类的情况。
哦 原来是这样,我正在看多继承  看来只需要了解而在实际编程中应尽量避免吧?
#7
pangding2011-05-04 18:30
嗯,我是这意见。不过只是一家之言。
你可以自己多查点资料,也许不同的人有不同的说法。
1