#include<iostream>
using namespace std;
//家具类
class Furniture
{
public:
int m;//材质
};
//在设计类时,当该类可能要被多继承,一定要加虚继承
//将该父类继承爷爷类,改成虚继承,防止该类的儿子类在多继承父类的时候,
//出现爷爷类中的变量会拷贝多份。
class Bed :virtual public Furniture
{
public:
void sleep()
{
cout << "在床上睡觉" << endl;
}
private:
};
//也要虚继承
class Sofa :virtual public Furniture
{
public:
void sit()
{
cout << "在沙发上休息" << endl;
}
private:
};
//沙发床,多继承,只有c++语言有(特性),其他语言没有
class SofaBed :public Bed,public Sofa
{
public:
void SleepAndSit()
{
sleep();
sit();
}
private:
};
int main()
{
Bed b;
b.sleep();
Sofa s;
s.sit();
SofaBed sb;
sb.SleepAndSit();
//sb.m;//不虚继承的话,会发生访问不明确
sb.m;//虚继承后不会发生访问不明确,此时只有一个m
//sb.Bed::m = 200;
//sb.Sofa::m = 300;//只能通过作用域来访问
return 0;
}
总结:
在设计类时,当该类可能要被多继承,一定要加虚继承。
将该父类继承爷爷类,改成虚继承,防止该类的儿子类在多继承父类的时候,出现爷爷类中的变量会拷贝多份。
多继承,只有c++语言有(特性),其他语言没有。