多继承与虚继承
当存在多继承发生菱形继承时 可能存在二义性问题
(多继承的对象不能确定对象的属性是来自哪个类)
//家具类
class Furniture {
public:
private:
int m; //材质
};
//床
class Bed :public Furniture
{
public:
void sleep()
{
cout << "在床上睡觉" << endl;
}
};
//沙发
class Sofa :public Furniture
{
public:
void sit()
{
cout << "在沙发上坐着" << endl;
}
};
//沙发床 多继承
class SofaBed :public Bed, public Sofa {
public:
void sleepAndSit()
{
sleep();
sit();
}
};
int main()
{
SofaBed sofaBed;
sofaBed.sleepAndSit();
//sofaBed.m = 10; 这里会有二义性 不能确定是从床还是沙发继承的m属性值
}
解决方案如下:使用virtual继承,就是在继承时使用virtual public (在原来pubic继承前加一个virtual关键字即可)
class Sofa :virtual public Furniture class Bed :virtual public Furniture



