C++ 菱形继承
来源:互联网 发布:易支付源码 编辑:程序博客网 时间:2024/05/29 03:18
1.菱形继承是什么
如上,菱形继承即多个类继承了同一个公共基类,而这些派生类又同时被一个类继承。
这么做会引发什么问题呢,让我们来看一段代码
#include<iostream>using namespace std;class Person{public: string name;};class Student : public Person{protected: int age;};class Teacher : public Person{private: int num;};class Manger : public Student,public Teacher{public: string sex;};int main(){ Manger m; m.name; return 0;}
由于Manger同时继承了Student和Teacher,而这个两个类同时继承了Person。这样就导致Manger对“name”的访问不明确。
那么我们可以怎样解决呢?
1⃣️ 第一种解决方法,使用域限定我们所需访问的函数
int main(){ Manger m; m.Student::name; m.Teacher::name; return 0;}
这样的做法是没有问题的,但是,这样做非常的不方便,并且当程序十分大的时候会造成我们思维混乱
于是,C++给了我们一个别的解决方案——虚继承
2.虚继承
虚继承是什么?
虚继承即让A和B在继承Base时加上virtural关键字,这里需要记住不是D使用虚继承
我们可看见在student和teacher中不再保存person中的内容,保存了一份偏移地址,然后将person的数据保存在一个公共位置处这样保证了数据冗余性的降低同时,我们也能直接的使用m.name来访问person里的name。
#include<iostream>using namespace std;class Preson{public: string name;};class Student :virtual public Preson{protected: int age;};class Teacher :virtual public Preson{private: int num;};class Manger : public Student,public Teacher{public: string sex;};int main(){ Manger m; m.name; return 0;}
阅读全文
0 0
- 【C++】菱形继承
- 【c++】菱形继承
- 【c++】菱形继承
- 【C++】继承(菱形继承)
- <c++>继承及菱形继承
- 【C++】菱形继承与虚拟菱形继承的对比分析
- C++:菱形继承和虚拟继承
- (C++)继承、菱形继承和虚继承的那些事儿
- 【C++】菱形虚拟继承(内存布局)
- 【c++】菱形虚拟虚拟继承模型探索
- C++: 虚表和菱形虚拟继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- C++中的函数指针和函数对象总结
- struts2所有的常量配置
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 16 roswtf入门
- 还是畅通工程||HDU1233
- 微信小程序
- C++ 菱形继承
- Gradle sync failed: Could not download imagepipeline.aar (com.facebook.fresco:imagepipeline:1.3.0):
- JSONModel解析数据成Model
- Docker启动Nginx
- JVM 菜鸟进阶高手之路六(JVM每隔一小时执行一次Full GC)
- How to move the InnoDB log sequence number (LSN) forward
- dubbo中的config分析
- 数据库设计规范
- python机器学习之支持向量机