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;}