C++的继承

1.继承的基本形式

1.还是举每次讲继承都会举得一个例子:老师和学生都有人类的共同信息----姓名,性别,身份证等等,而学生有学工号,课表。老师有上班时间等等,所以在类中就有了继承这一说,子类继承父类。

2.基本形式就是:

比如,你用proctected继承的话,你就不可以切片了,就相当于父类=子类,可以复制一下下面的代码就会发现问题所在了。

2.子类强转父类,切片/切割

1.证明切片是直接切片,而不是和其他强转类型一样,先弄一个临时变量。

我有写过其他类型强转的问题,可以看一下。

C++中引用"&"的权限问题_Qianxueban的博客-CSDN博客

怎么证明呢,那就是用C++的引用的权限可以平移缩小,但不可以放大来观察。

因为临时变量产生具有常性,所以不可以引用,除非加const,让权限是平移。

2.继承的作用域

1.遇到相同的函数名或变量

1.函数名中的形参不一样,但依旧不会函数名重载,依旧会冲突。

3.派生类的默认成员函数吗、

举个构造函数的例子,其他的可以使用我的例子,一个个的尝试。

4.继承中的单继承和多继承

1.多继承引发的菱形继承问题

1.菱形继承会发生什么情况呢?

我感觉我不说,大家也能猜出来会出现什么情况了,它的A这个基类他不唯一了,所以肯定会发生奇异了。

很明显报错了

2.怎么解决菱形继承的问题

在继承父类的时候加上virtual就可以了:

3.virtual在底层是怎么解决这个问题的呢?

1.我们看一下对比你就会发现了,

先看一下没有virtual的程序内存中是如何存储的。

再看一下加了virtual是如何存储的:

相当于它不存储A中的_a了,而是存储内存的偏移量了。那有些人会问了,为什么不存储这些,代码运行内存,运行到最后就知道是A的这个基类了,但是你忘了上面讲的切片,他只有一小段的内容了,他就判断不出来A这个类的位置了,所以万万不可。

那为什么不直接存储A的指针呢, 可能设计到后面的多态,作者这边也还在学习中哈。

相关推荐
kokunka几秒前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
云栖梦泽1 小时前
易语言开发从入门到精通:补充篇·网络编程进阶+实用爬虫开发·API集成·代理IP配置·异步请求·防封禁优化
开发语言
java1234_小锋1 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
铅笔侠_小龙虾1 小时前
Flutter Demo
开发语言·javascript·flutter
2501_944525541 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
福大大架构师每日一题2 小时前
ComfyUI v0.11.1正式发布:新增开发者专属节点支持、API节点强化、Python 3.14兼容性更新等全方位优化!
开发语言·python
wangdaoyin20102 小时前
若依vue2前后端分离集成flowable
开发语言·前端·javascript
John_ToDebug2 小时前
浏览器内核崩溃深度分析:从 MiniDump 堆栈到 BindOnce UAF 机制(未完待续...)
c++·chrome·windows
向阳开的夏天2 小时前
麒麟V10源码编译QT5.6.3 (x86 & arm64)
开发语言·qt
Evand J2 小时前
【MATLAB例程】TOA和TDOA混合定位,适用于二维平面的高精度定位。锚点数量、位置、测量噪声可自行调节
开发语言·matlab·定位·tdoa