欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++虚继承的意义和使用

程序员文章站 2022-07-15 16:51:32
...

虚继承:多个派生类保存相同基类的同名成员时,虽可以在不同的数据成员中分别存放不同的数据 ,但我们只需要相同的一份。

解决了多父类重复成员只保留一份的问题。

 

比如现在有一个沙发床,它既有床的属性又有沙发的属性,它们都有长宽高的属性,但是我们却只需要知道它的一个状态的属性。

它的一个长宽高能体现多个状态。

 

家具{

属性:长,宽,高;

}

 

沙发床:public 沙发,public 床{

属性:长,宽,高;

}

 

沙发:public 家具   ----》改为:沙发:virtual public 家具

{

属性:长,宽,高;

}

 

床:public 家具   ----》改为:床:virtual public 家具

{

属性:长,宽,高;

}

我们只需要他们的共同属性长宽高就行了,我们可以把共同属性提出来作为家具类,再由不同状态继承(虚继承),但最后都归总于沙发床。

#include <iostream>
using namespace std;
 
class Base{
public:
    Base(int d=100):data(d){
        cout<<"Base()"<<data<<endl;
    }
    int data;
};
 
class A :virtual public Base{
public:
    A():Base(){
        cout<<"A()"<<data<<endl;
    }
    void setD(int d)
    {
        data = d;
    }
};
 
class B :virtual public Base{
public:
    B():Base(){
        cout<<"B()"<<data<<endl;
    }
    int getD()
    {
        return data;
    }
};
 
class C :public A,public B{
public :
    C():A(),B(),Base(100){
        cout<<"C()"<<data<<endl;
    }
    void dis(){
        cout<<data<<endl;
        cout<<A::data<<endl;
        cout<<B::data<<endl;
    }
};
 
int main(){
    C c;
    c.dis();
    c.setD(10000);
    c.setD(2000);
    cout<<c.getD()<<endl;
    c.dis();
}


 

更改床、沙发、沙发床的长宽高它们的不同状态的长宽高都会发生变化。

 

转载自:https://blog.csdn.net/blank__box/article/details/78239208

相关标签: 虚继承