什么叫做虚基类,它有何作用

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:18:39
要详细的定义和解答 谢谢
2楼的大侠,我理解你的例子,也明白它的意思。
不过我需要的是一段文字回答这个试题。。。。就是标准答案那种。。

在C++中,如果在多条继承路径上有一个公共的基类,那么在这些路径中的某几条路径的汇合处,这个公共的基类就会产生多个实例.如果想使这个公共的基类只产生一个实例,则可将这个基类说明为虚基类. 这要求在从base类派生新类时,使用关键字virtual将base类说明为虚基类.

用例子说明吧。

class base{protected:int b};
clase base1:public base{..};
clase base2:public base{..};

clase derived:public base1,public base2 {..};

derived d;
d.b //错误.
d.base::b //错误. 因为不知是用d.base1::b还是d.base2::b
=================================================
class base{protected:int b..};
clase base1:virtual public base{..}; //说明base为虚基类
clase base2:virtual public base{..}; //说明base为虚基类

clase derived:public base1,public base2 {..};

derived d;
d.b //对.
d.base::b //对. 因为d.base::b和d.base1::b还是d.base2::b都是引用同一虚基类成员b,具有相同的值.

当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。
在继承中产生歧义的原因有可能是继承类继承了基类多次,从而产生了多个拷贝,即不止一次的通过多个路径继承类在内存中创建了基类成员的多份拷贝。虚基类的基本原则是在内存中只有基类成员的一份拷贝。这样,通过把基类继承声明为虚拟