29.C++类的多重继承——虚基类

/*
 虚基类:
 解决继承中共同基类成员的值在派生类有不同的复制的问题
 将共同基类设置 为虚基类,这是从不同路径继承来的同名数据成员
 在内存中只有一个拷贝,同名函数也只有一个映射
 */
#include <iostream>
class D   //声明共同基类D
{
public:
    int n;
    D(int newN=100)//构造函数
    {
        n=newN;
    }
};
class B: virtual public D  //定义虚基类D的派生类B
{
public:
    int nb;
    B(int newN=100,int newM=100):D(newN)
    {
        nb=newM;
    }
    
    void output()
    {
        std::cout<<"B::n="<<B::n<<std::endl;
    }
};

class C:virtual public D //定义虚基类D的派生类C
{
public:
    int nc;
    C(int newN=100,int newM=100):D(newN){ nc =newM; }
    void output()
    {
        std::cout<<"C::n="<<C::n<<std::endl;
    }
    
};

class A:public B,public C//由B、C派生A
{
public:
    int na;
    A(int a,int b,int c,int d,int e):B(a,b),C(c,d){na=e;}
    void output()
    {
        std::cout<<"nb="<<nb<<",nc="<<nc<<",na="<<na<<std::endl;
    }
};

int main(int argc, const char * argv[])
{

    A myA(10,20,30,40,50);
    myA.B::output();
    myA.C::output();
    myA.output();
    myA.n=500;
    myA.B::output();
    myA.C::output();
    /*输出结果
     
     B::n=100
     C::n=100
     nb=20,nc=40,na=50
     B::n=500
     C::n=500
     
     */
    return 0;
}

你可能感兴趣的:(29.C++类的多重继承——虚基类)