bllue215() 的回答是正确的。对于虚拟继承的理解,可以用共享概念来理解。
对于如下的继承关系。class a{ public: int i;}; class b:public a{}; class c:public a{}; class d:public b,public c{};上述的继承体系中,由于类b和类c都是一般的继承于a,所以在b、c两个类对象中,都会有其基类a的数据i的一份拷贝。也就是int b::i和 int c::i,而此时类d继承于b和c,所以,类d中就会有两份i的数据,一份继承与b而来,另一份继承于c而来,所以对于d来说,这是冗余的,如果类b和c都是virtual public a的话,那么在类d中,就只有一份数据。而且无论以后怎么继承,a都只有一份。
其实虚拟继承的实现因编译器不同而不同,基本上都是用virtual base指针来实现的,只是这个指针的位置放在哪个地方而异。
我个人对这整个过程的了解还是比较模糊的,希望有高手能给我解析一下虚拟继承的实现概要,不胜感激!!
虚拟继承一般用在多重继承中.在多重继承中由于某个基类可能在类层次结构中出现多次,非虚拟继承的话,派生类中将含有几个基类的成员拷贝,这样产生冗余.最常见的就是iostream类.
通过虚拟继承的派生类只无论基类在类层次结构中出现几次就,都只有一份拷贝,避免了上述情况发生.
用法: class driver : virtual public base
用来: 如上所述