C++ 虚继承起因,语法练习
来源:互联网 发布:python sys.read 编辑:程序博客网 时间:2024/05/07 23:16
为什么会搞出个虚继承 这个概念
都是因为多重继承引发的问题
Bird 从Animal 继承而来,获得的了Animal类的全部成员,
Fish 从Animal 继承而来,获得的了Animal类的全部成员,
FB 从Bird 和 Fish 继承而来,获得了Bird的全部成员 以及 Fish的全部成员
这样FB就有2个breath成员,当 f.breath()时就搞不清 breath是来自Bird的,还是来自Fish的?
程序就通不过...
D:\Program Files\Microsoft Visual Studio\MyProjects\虚继承\xujic.cpp(37) : error C2385: 'FB::breath' is ambiguous
//xujic.cpp#include <iostream>#include <string>using namespace std;class Animal{public:void breath(){cout<<"动物要呼吸"<<endl;}};class Bird:public Animal{};class Fish:public Animal{};class FB:public Bird,public Fish{};void main(){Animal a;a.breath();Bird b;b.breath(); FB f;f.breath();//错误 含糊不清, 必须指定类, 如b.Fish::breath() }
解决办法一: f.Fish::breath(); 调用的时候直接指定是哪个类的
解决办法二: 让 Bird 与 Fish 从 Animal继承的时候 加上 virtual ,就是所谓的 虚继承,这样f.breath()就是从基类Animal继承而来的,不再出现冲突.
//xujic.cpp#include <iostream>#include <string>using namespace std;class Animal{public:void breath(){cout<<"动物要呼吸"<<endl;}};class Bird:virtual public Animal{};//virtual :虚继承关键字class Fish:virtual public Animal{};//virtual :虚继承关键字class FB:public Bird,public Fish{};void main(){Animal a;a.breath();Bird b;b.breath(); FB f;f.breath();//ok,breath()来自基类Animal}
- C++ 虚继承起因,语法练习
- C++(继承语法&&继承方式)
- 起因
- C/C++_log2000_继承的练习1
- OC面向对象 点语法 继承 重写练习
- LHF Objective-C语法(6)继承
- objective-c语法学习:类的继承
- Objective-C语法之继承、封装、多态
- C++[语法]公有继承和多态
- C++--继承中的类模板语法
- C++,类,对象,引用--语法练习.
- C++,返回对象的引用,语法练习
- C++, 类的构造函数 语法练习
- C++,字符数组,赋值问题,语法练习
- C++,多态的实现,语法练习
- 虚基类练习:动物虚继承
- c++基础语法---虚继承
- 继承练习
- 三十、多态性、动态类型 和 动态绑定(三)运行时 VS 编译时
- fedora 17下安装fcitx
- android system ro
- 三十一、多态性、动态类型 和 动态绑定(四)id类型 和 静态类型
- Android技术讲座(3):Android应用程序的内容
- C++ 虚继承起因,语法练习
- 使用mount修改你的android中/system为只读权限
- 三十二、多态性、动态类型 和 动态绑定(五)措施所附带的参数 和 所产生的结果类型
- 三十三、多态性、动态类型 和 动态绑定(六)关于物件类型的问题
- 测试模式列表
- 三十四、多态性、动态类型 和 动态绑定(七)用 @try命令 处理 意外情况
- Android系统移植方法详解(转)
- 中国搜索引擎乱弹(1)-十年寡头养成史
- Tomcat在处理GET和POST请求时产生的乱码问题