C++继承与多态
2017-07-21 17:45
295 查看
1:分析菱形继承的问题。
2:剖析虚继承是怎么解决二义性和数据冗余的
首先,我们先来看一个菱形继承的程序。
为了解决以上问题,我们引入虚继承的语法。可以有效的解决菱形继承的数据冗余和二义性问题。
1.虚继承解决了菱形继承体系里子类对象包含多份父类对象的数据冗余问题和浪费空间的问题。
2.虚继承看起来复杂,但在实际应用中我们通常不会定义如此复杂的继承体系,一般不到万不得已不建议定义菱形结构的虚继承体系结构。因为使用虚继承解决数据冗余问题也带来了性能上的损耗。
2.剖析虚继承是怎么解决二义性和数据冗余的
在上述程序中,二义性表现在 在Assistant类中存在name对象,无法确定次name对象是Student的还是Teacher的。而在Assistant类中存在Student类和Teacher类的name对象相等的情况,即Assistant类中有另个含义相同的量,此为数据冗余。
2:剖析虚继承是怎么解决二义性和数据冗余的
首先,我们先来看一个菱形继承的程序。
#include<iostream> using namespace std; class Person { public: string _name; }; class Student : public Person { protected: string _id; } class Teacher : public Person { protected: string _num; } class Assistant : public Student,public Teacher { protected: string _majorcourse; } void test() { //显示指定访问那个父类的成员 Assistant a;// a.Student::_name = "xiaoke"; a.Teacher::_name = "keming"; }
为了解决以上问题,我们引入虚继承的语法。可以有效的解决菱形继承的数据冗余和二义性问题。
1.虚继承解决了菱形继承体系里子类对象包含多份父类对象的数据冗余问题和浪费空间的问题。
2.虚继承看起来复杂,但在实际应用中我们通常不会定义如此复杂的继承体系,一般不到万不得已不建议定义菱形结构的虚继承体系结构。因为使用虚继承解决数据冗余问题也带来了性能上的损耗。
clsaa Student : virtual public Person { protected: char* id; } class Teacher : virtual public Person { protected: char* _num; } class Assistant : public Student,public Teacher { protected: char* _majorcourse; }
2.剖析虚继承是怎么解决二义性和数据冗余的
在上述程序中,二义性表现在 在Assistant类中存在name对象,无法确定次name对象是Student的还是Teacher的。而在Assistant类中存在Student类和Teacher类的name对象相等的情况,即Assistant类中有另个含义相同的量,此为数据冗余。
class A { public: int _a; }; class B : virtual public A { public: int _b; }; class C: virtual public A { public: int _c; }; class D: public B, public C { public: int _d; }; int main() { D d; d.B::_a = 0; d.C::_a = 1; d._b = 2; d._c = 3; d._d = 4; return 0; }
相关文章推荐
- C++继承-重载-多态-虚函数
- C++封装、继承、多态
- C++部分——C++继承和多态(1)
- C++ 虚表(探索多态的原理)和菱形继承
- C++组合,继承,委托,多态_boolan
- C++之继承与多态
- 【转载】C++之继承与多态
- 简单理解C++的多态公有继承及虚函数
- 嵌入式开发之C++基础学习笔记4--面向对象封装继承多态
- C++内存中的封装、继承、多态(下)
- Java中的继承,封装,多态三种体系与C++的区别
- c++ 植物类 继承多态 菱形继承
- c++封装,继承,多态
- c++基本语法学习2 继承 多态 模板
- C++学习笔记--继承与多态
- C++封装、继承、多态
- C++多态之继承5-继承和访问说明符(public ,protected, private)
- C++多态、继承的简单分析
- C++多态调用和继承内存分布
- C++封装、继承、多态