1 類的多繼承
class Sofabed : public Sofa,public Bed?
兩個(gè)都是公有繼承秽五,如果不寫默認(rèn)為私有繼承。
2 產(chǎn)生了二義性
如上饥悴,Sofa 和Bed,如果都有weight變量筝蚕。
使用s.getWeight();/*error 二意性,引入虛擬繼承*/
可以使用
s.Sofa::getWeight();
s.Bed::getWeight();
來區(qū)分卦碾,不過這樣有點(diǎn)麻煩。
3 虛擬繼承
1 先定義一個(gè)家具類
class Furniture {
private:
int weight;
public:
void setWeight(int weight) { this->weight = weight;}
int getWeight(void) {return this->weight;}
}
2 床和沙發(fā)都虛擬繼承這個(gè)家具
class Sofa : virtual public Furniture{
private:
int a;
public:
void watchTV(void) { cout<<"watch TV"<<endl;}
};
class Bed : virtual public Furniture{
private:
int b;
public:
void sleep(void) {cout<<"sleep"<<endl;}
};
3? 沙發(fā)床多繼承這沙發(fā)和床
class Sofabed : public Sofa,public Bed {
private:
int c;
};
結(jié)論:虛繼承時(shí)起宽,共同的虛父類會(huì)存在于同個(gè)空間洲胖。