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

来源:互联网 发布:steam动态壁纸软件mac 编辑:程序博客网 时间:2024/06/13 23:58
/* 虚基类: 解决继承中共同基类成员的值在派生类有不同的复制的问题 将共同基类设置 为虚基类,这是从不同路径继承来的同名数据成员 在内存中只有一个拷贝,同名函数也只有一个映射 */#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;}

原创粉丝点击