1:分析菱形继承的问题。 2:剖析虚继承是怎么解决二义性和数据冗余的。
2017-07-21 00:46
447 查看
1:分析菱形继承的问题。
菱形继承存在二义性和数据冗余具体如下图
具体的二义性如下
class Person { public: string _name; //姓名 }; class Student:public Person { protected: int _num; //学号 }; class Teacher: public Person { protected: int _id; //职工编号 }; class Assistant:public Student,public Teacher { protected: string _majorCourse; //主修课程 }; int main() { // 二义性 // 数据冗余 Assistant a; a._name = "aaaaaaa"; return 0; }
这样在定义a._name = “aaaaaa”时系统就会提示目标不明确,
解决二义性的方法:,就是在_name前标明域,如a.Student::_name,则访问的是Student中的_name,这种方法比较麻烦并且而没有解决冗余的问题。
2:剖析虚继承是怎么解决二义性和数据冗余的。
class Person { public: string _name; //姓名 }; class Student:virtual public Person { protected: int _num; //学号 }; class Teacher:virtual public Person { protected: int _id; //职工编号 }; class Assistant:public Student,public Teacher { protected: string _majorCourse; //主修课程 };
通过虚继承不仅解决了二义性,并且解决了数据冗余。
下边剖析具体怎么解决这两个问题(VS中)。
在子类中继承的两个或者更多的父类中,每个父类会在对象前面开一个整形用来存储地址,这个地址指向偏移量,如图中的20指向的就是下20个字节的地址,也就是父类中共同继承的它们父类(父类的父类)对象。
这样就不仅可以解决二义性,而且解决了数据的冗余。
相关文章推荐
- 通过菱形继承剖析虚继承解决二义性和数据冗余问题
- 剖析C++是如何解决菱形继承的二义性和数据冗余的
- 菱形继承问题和虚继承是如何解决二义性与数据冗余的
- 多重继承引发的二义性问题及解决方法分析
- 菱形继承问题分析及其在C++的解决方法(虚继承)
- win8磁盘占用100怎么办 win8磁盘占用率100%问题分析及解决方法
- 菱形继承二义性解决方法--虚拟继承
- 什么是菱形继承带来的二义性问题
- C++虚基类解决二义性问题及执行结果分析
- 面向对象--多继承&派生类对象内存布局分析&各基类指针所指向的位置分析(解决面试宝典第四版P147问题)
- C++虚函数分析[1]--同名函数继承二义性问题
- C++学习笔记(9)——使用范围运算符解决继承中的二义性问题
- 菱形继承产生的问题及解决
- 【编程语言】如何解决菱形继承问题
- c++菱形继承产生的问题及解决
- 菱形继承,二义性和数据冗余
- C#访问数据库时中文乱码问题分析及解决
- 怎么解决EDIUS视频条全变灰色不能编辑问题
- TRIZ发明问题解决理论——本质是分析问题中的矛盾,利用资源(时间空间物质能量功能信息等)来解决矛盾从而解决问题——抽象出来:问题是什么,为什么?
- 穆利堂推荐:员工效率低下怎么办?工作日志,就是解决这个问题的一种简单办法。