当前位置: 首页 > news >正文

c++继承

 本篇文章只是对之前的继承文章做一个重启!

 继承的语法格式

class 子类(派生类):继承方式  父类(基类){}

继承的方式

public   公共类

private  私有类

protected  保护类

 总结

1.私有的,不管使用什么继承方式都不可访问

2.保护类, 保护或公共方式继承则依旧是保护

3.公共类,随继承方式改变

继承之构造函数与析构函数的调用顺序

从上面两张图中,我们可以看到,继承父类之后,初始化时,会先调用父类的构造函数,再调用子类的构造函数,析构时,则与初始化时相反,会先调用子类的析构函数,再调用父类的析构函数

总结

初始化时:先调用父类的构造函数,再调用子类的构造函数

析构时:先调用子类的析构函数,再调用父类的析构函数

菱形继承

概念

两个派生类同时继承一个基类,同时又有一个新的类继承了这两个派生类,这种情况就叫菱形继承

引发的问题

1.资源浪费 2.会引发二义性

解决方法

在继承方式之前,添加关键字virtual,使之变为虚继承

案例

错误代码
#include<iostream>
using namespace std;
class animal
{
public:int a_age = 10;
};
class sheep :public animal
{};
class tuo :public animal
{};
class sheeptuo : public sheep, public tuo
{};
int main()
{sheeptuo st;st.sheep::a_age = 25;st.tuo::a_age = 39;cout << "st.sheep::a_age = " << st.sheep::a_age << endl;cout << "st.tuo::a_age = " << st.tuo::a_age << endl;cout << "st.a_age" << st.a_age << endl;return 0;
}

解决方法

在继承方式前面添加关键字virtual

修改后的代码

#include<iostream>
using namespace std;
class animal
{
public:int a_age = 10;
};
class sheep :virtual public animal
{};
class tuo :virtual public animal
{};
class sheeptuo : public sheep, public tuo
{};
int main()
{sheeptuo st;st.sheep::a_age = 25;st.tuo::a_age = 39;cout << "st.sheep::a_age = " << st.sheep::a_age << endl;cout << "st.tuo::a_age = " << st.tuo::a_age << endl;cout << "st.a_age = " << st.a_age << endl;return 0;
}

 那么它的底层是怎么回事?来看一下博主下面的解释

底层逻辑

右边的图是我们一开始的代码(没有虚继承的代码),从图中可以很明显地看见有两份age,而虚继承后(左边的图)age少了一份,并且多了两个vbptr和两个vbtable,这两个vbptr是虚基类指针,vbtable是虚基类表格

这里的底层逻辑就给大家画在图上了。

那么最后总结一下这个底层逻辑

总结

使用虚继承后底层会出现vbptr指针,它会指向虚基类表格从而避免出现菱形继承出现的情况

ok,本篇文章就先水到这里,我们下期文章再见!

http://www.xdnf.cn/news/201475.html

相关文章:

  • Netty在线客服系统落地方案
  • SpringMVC 使用thymeleaf 进行数据展示
  • 【C++游戏引擎开发】第28篇:OpenGL异步加载纹理技术详解
  • 迭代器与生成器
  • java可复用代码
  • 牟乃夏《ArcGIS Engine 地理信息系统开发教程》学习笔记 4-空间分析与高级功能开发
  • 使用JDK的数据校验和Spring的自定义注解校验前端传递参数的两种方法
  • vue3+js项目el-table导出excel表(带边框)
  • 【重走C++学习之路】22、C++11语法
  • 深度学习---框架流程
  • vue的生命周期 以及钩子
  • C语言实现卡ID删除与排序
  • 高压场景首选:CKESC ROCK 120A-H CAN 电调技术解析与实测报告
  • 浅谈链表的优化技巧
  • Python对字典列表按某个字段排序
  • 假云阴影模拟
  • MYSQL-OCP官方课程学习截图
  • PCIe-8634四口千兆PoE以太网卡的性能与应用分析
  • 机器学习概述
  • vue3代码规范管理;基于vite和vue3、 eslint、prettier、stylelint、husky规范;git触发eslint校验
  • 铭依眼科亮相“中华眼科菁英“.创新思路赋能近视矫正新高度
  • 光学涡旋干涉仪
  • 鹧鸪云光伏项目智慧施工软件:数字化驱动的光伏建设新范式
  • 数据可视化大屏——物流大数据服务平台
  • 课堂案例分析
  • 01《音量控制器》Unity
  • python使用dlib的5点和68点的人脸检测
  • 2020南京区域赛vp
  • Linux系统之----程序地址空间
  • mac 基于Docker安装minio服务器