多继承虚继承

这里写图片描述

#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++语言有(特性),其他语言没有。

猜你喜欢

转载自blog.csdn.net/young__fan/article/details/79939411