一、 虚拟继承
虚拟继承常用于具有如下模式(姑且叫做菱形继承模式)的多重继承中
b
/ /
/ /
d1 d2
/ /
/ /
d
d1,d2虚拟继承b,这样d继承d1和d2,但只继承一次b.
class b{};
class d1:vitual public b{};
class d2:vitual public b{};
class d:public d{};
b
/ /
/ /
d1 d2
/ /
/ /
d
d1,d2虚拟继承b,这样d继承d1和d2,但只继承一次b.
class b{};
class d1:vitual public b{};
class d2:vitual public b{};
class d:public d{};
示例代码(转):
#include <iostream.h>
class base {
public:
void fun()
{
cout<<"我是base"<<endl;
}
};
class dri1:virtual public base {
};
class dri2:virtual public base {
};
class dri3:public dri1,public dri2 {
};
void main()
{
dri3 a;
a.fun();
}
class base {
public:
void fun()
{
cout<<"我是base"<<endl;
}
};
class dri1:virtual public base {
};
class dri2:virtual public base {
};
class dri3:public dri1,public dri2 {
};
void main()
{
dri3 a;
a.fun();
}
虚拟继承是在多重继承情况下才可能出现,这时用虚拟继承来保证只继承一次.如果这时不采取虚拟继承,a.fun()将不知道是从dri2那里继承得来,还是从dri3那里继承得来.