C++ 继承的重复问题
2014-03-02 17:46
453 查看
重复继承是指一个派生类多次继承同一个
基类,C++中允许出现重复继承。
解决继承的重复问题
解决继承的重复问题有两种方法:
—使用作用域分辨符来唯一标识并分别访问他们;
—将直接基类的共同基类设置为虚基类
》从不同的路径继承过来的该类成员在内存中
只拥有一个复制,这样就解决了同名成员的
唯一标识问题
将直接基类的共同基类设置为虚基类
基类,C++中允许出现重复继承。
解决继承的重复问题
解决继承的重复问题有两种方法:
—使用作用域分辨符来唯一标识并分别访问他们;
—将直接基类的共同基类设置为虚基类
》从不同的路径继承过来的该类成员在内存中
只拥有一个复制,这样就解决了同名成员的
唯一标识问题
#include<iostream> using namespace std; class A { public: int x; A(int a){x=a;} }; class B:public A { public: int y; B(int a, int b):A(b){y=a;} }; class C:public A { public: int z; C(int a, int b):A(b){z=a;} }; class D:public B, public C { public: int m; D(int a, int b, int c, int d, int e):B(a,b),C(c,d){m=e;} void disp() { cout<<"x="<<B::x<<", y="<<y<<endl; cout<<"x="<<C::x<<", z="<<z<<endl; cout<<"m="<<m<<endl; } }; int main() { D d1(1,2,3,4,5); d1.disp(); return 0; }
将直接基类的共同基类设置为虚基类
#include<iostream> using namespace std; class A { public: int x; A(int a=0){x=a;} }; class B:virtual public A//由公共基类A虚拟派生出类B { public: int y; B(int a, int b):A(b){y=a;} }; class C:virtual public A//由公共基类A虚拟派生出类C { public: int z; C(int a, int b):A(b){z=a;} }; class D:public B, public C//由基类B,C派生出类D { public: int m; D(int a, int b, int c, int d, int e):B(a, b),C(c, d){m=e;} void disp(){ cout<<"x="<<x<<", y="<<y<<endl; cout<<"x="<<x<<", z="<<z<<endl; cout<<"m="<<m<<endl; } }; int main() { D d1(1,2,3,4,5); d1.disp(); d1.x=4; d1.disp(); return 0; }
相关文章推荐
- C++多重继承引发的重复调用问题与解决方法
- C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题
- C++学习笔记(8)——继承中的二义性问题和虚基类
- 解决C/C++语言中全局变量重复定义的问题
- 关于C++中私有继承后虚函数的访问权限与私有继承后多态的问题
- C/C++重复定义问题的由来和解决方法
- C++继承重名问题
- 关于 window c++ 编译 soket 重复定义的问题
- C++多重继承下的函数动态绑定问题分析
- 【c++程序】继承的几个问题
- c++ 中的多重继承和其权限问题
- 多继承实现COM类中的"菱形问题" C++也有一样的菱形问题
- C++虚继承相关问题
- C++ 虚基类问题、继承体系中的构造函数执行过程。(
- 不要重复发明轮子:C++重用的5重境界(4)——继承接口DLL
- C++继承、虚继承、虚函数类的大小问题
- C++对象模型----重复继承
- C++ 中头文件重复定义的问题
- 在C++的虚继承中要注意的一个传值问题
- C++头文件重复编译的问题