C++多继承与虚继承
目录
多继承与虚继承以及存在的问题
例子
多继承与虚继承以及存在的问题
虚继承
有了多继承,虚继承才会有意义
如果有个菱形结构的继承,爷爷类为A,然后B,C是A的派生类,最后D是B和C的派生类,
如果在A中有一个成员变量a,D去调用就会出现访问不明确,
虚继承就可以解决访问不明确的这种问题
如果这样继承B,C虚继承了A,virtual public,然后D继承B,C
通常的理解方式!
在虚继承之后,A里面的成员变量a是不复制给B和C的,而是只给了B和C使用权,所以D也只有使用权
多继承,虚继承不建议用,结构复杂,内存开销比较大。
用菱形的结构简单的就可以了,可读性比较好
这里的A叫做虚基类
例子
采用多继承,会出现访问不明确的问题。
如下代码:
#include <iostream>
using namespace std;class A{public:A(){m_valueA = 0;}int m_valueA;void print(){cout << "class A print() called!" << endl;}
};class B: public A{};class C: public A{};class D: public B, public C{};int main(){D d;cout << d.m_valueA << endl;getchar();return 0;
}
运行报错截图如下:
此时采用虚继承就能很好的解决这个问题:
代码如下:
#include <iostream>
using namespace std;class A{public:A(){m_valueA = 0;}int m_valueA;void print(){cout << "class A print() called!" << endl;}
};class B: virtual public A{};class C: virtual public A{};class D: public B, public C{};int main(){D d;cout << d.m_valueA << endl;getchar();return 0;
}
运行截图如下:
C++多继承与虚继承相关推荐
- C++ 多继承和虚继承的内存布局
原文链接:https://www.oschina.net/translate/cpp-virtual-inheritance 警告. 本文有点技术难度,需要读者了解C++和一些汇编语言知识. 在本文中 ...
- C++继承详解三 ----菱形继承、虚继承
转载:http://blog.csdn.net/pg_dog/article/details/70175488 今天呢,我们来讲讲菱形继承与虚继承.这两者的讲解是分不开的,要想深入了解菱形继承,你是绕 ...
- 菱形继承和虚继承、对象模型和虚基表
1.菱形继承(钻石继承):两个子类继承同一父类,而又有子类同时继承这两个子类.例如B,C两个类同时继承A,但是又有一个D类同时继承B,C类. 2.菱形继承的对象模型 class A { public: ...
- C++继承机制(三)——多继承、菱形继承、虚继承原理
目录: C++继承机制(一)--基本语法.三种继承方式.继承哪些数据 C++继承机制(二)--继承中的构造和析构顺序.继承同名成员的处理方式 C++继承机制(三)--多继承.菱形继承.虚继承原理 本篇 ...
- C++对象模型:单继承,多继承,虚继承
什么是对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各种支持的底层实现机制. 类中成员分类 数据成员分为静态和非静态,成员函数有静态非静态以及虚函数 cla ...
- C++之菱形继承与虚继承(含虚函数)
面向对象的三大特征:封装,多态,继承 前面我们已经讲了继承的一些知识点,在这基础上,我们讲的时候再涉猎一些多态的只是. 下面我们先接着上次讲有虚函数的菱形虚继承 首先什么是虚函数.? 虚函数:在类里面 ...
- C++57个入门知识点_50 菱形继承与虚继承(C++中语法允许多重继承造成菱形继承;会造成近亲结婚的问题;可以通过虚继承的方式解决;实际项目中不多用多重继承)
上篇C++57个入门知识点_49 多重继承与组合(一个类同时具有多个类的属性的方法:多重继承或者组合:多重继承:一个类同时继承多个类:多重继承构造和析构的顺序与普通继承类似:组合:类中包含多个成员对象 ...
- C++普通继承和虚继承详解
继承 继承概念 所谓的继承就是一个类继承了另一个类的属性和方法,这个新的类包含了上一个类的属性和方法,被称为子类或者派生类,被继承的类称为父类或者基类. 继承特点 子类拥有父类的所有属性和方法(除了构 ...
- C++菱形继承与虚继承
菱形继承 菱形继承引入的问题 菱形继承的解决 虚继承的逻辑 菱形继承 不合理的地方 查看类布局的方式:使用命令 cl 菱形继承的构造 虚继承 虚基类 虚继承构造 虚继承的作用 菱形继承引入的问题 造成 ...
最新文章
- [转载]Python方法绑定——Unbound/Bound method object的一些梳理
- [蓝桥杯][2015年第六届真题]密文搜索(排序+二分)
- 没找到rpm命令_Mysql的命令总结和PyMysql
- 江民杀毒软件KV网络版反病毒整体解决方案──金融行业
- 西南科技大学城市学院计算机专科,西南科技大学城市学院官网
- 【干货贴】消息队列如何利用标签实现消息过滤
- NMEA码详解【转】
- vf更改当前路径_这份 window.location 备忘单,让你更有条理解决地址路径问题!...
- 「LibreOJ β Round #4」多项式 (广义欧拉数论定理)
- struts2+spring的两种整合方式
- 【读书笔记】IOS帝国-Apple Ⅱ/Mac/皮克斯/iPod/iTunes/iPhone/App Store/iPad,苹果教父:史蒂夫·乔布斯传_2020.02.15
- 论文中的Matlab画图常用技巧
- Tomcat Get请求中文乱码
- 管中窥豹SPDK RBD bdev 模块
- 《私募股权基金投资基础知识》---第六章
- 思科防火墙解析(ASA)
- matlab 边缘检测 抠图,ps如何调整边缘的流程:边缘检测、调整边缘、输出(调整边缘抠图...
- html字体外围有黄色边框,input或textarea在chrome、safari浏览器点击获得焦点时出现黄色边框去掉的方法...
- python爬取高匿代理IP(再也不用担心会进小黑屋了)
- 什么是盒模型(标准盒模型,怪异盒模型)