解决菱形继承的方法--虚继承

简介: 解决菱形继承的方法--虚继承

菱形继承概念:

两个派生类继承同一个基类

又有某个类同时继承者两个派生类

这种继承被称为菱形继承,或者钻石继承

典型的菱形继承案例:

image.png

菱形继承问题:

羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。

草泥马继承自动物的数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以。

简单来说,就是通过多条途径重复继承了基类中的成员,就是一份数据继承了多份.

示例:

class Animal
{
public:
  int m_Age;
};
//继承前加virtual关键字后,变为虚继承
//此时公共的父类Animal称为虚基类
class Sheep : virtual public Animal {};
class Tuo   : virtual public Animal {};
class SheepTuo : public Sheep, public Tuo {};
void test01()
{
  SheepTuo st;
  st.Sheep::m_Age = 100;
  st.Tuo::m_Age = 200;
  cout << "st.Sheep::m_Age = " << st.Sheep::m_Age << endl;
  cout << "st.Tuo::m_Age = " <<  st.Tuo::m_Age << endl;
  cout << "st.m_Age = " << st.m_Age << endl;
}
int main() {
  test01();
  system("pause");
  return 0;
}

总结:

  • 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义
  • 利用虚继承可以解决菱形继承问题

解决办法两种,要么用作用域,要么用虚继承,


解释虚继承:

在vs控制命令板中,输入命令查看类分布

C:\Users\Administrator\source\repos\test02\test02>cl /d1 reportSingleClassLayoutSheepTuo “菱形继承-虚继承.cpp”


我们可以发现继承的不是父类成员而是虚基类指针,虚基类指针指向虚基类表,表中记录偏移量,通过偏移量找到继承的基类成员变量.

20200227115311306.jpg

相关文章
|
11月前
|
监控 安全 网络安全
外贸企业网站制作:使用WordPress搭建一个展示型的外贸企业网站
本篇主要介绍使用WordPress的CMS管理系统搭建企业外贸网站,也可以称为B2B外贸网站。外贸网站制作需要准备的资料和建站流程:域名申请注册、服务器性能选配、服务器管理工具、WordPress的安装、企业展示型主题的选择和安装、使用WordPress插件的完成网站所需的功能、监控服务器运行状态保证网站正常运行、利用白帽技术提升SEO排名、使用SEO工具对站内内容文章的持续更新优化,吸引更多的自然流量提高转化率和成单率。
外贸企业网站制作:使用WordPress搭建一个展示型的外贸企业网站
腾讯T4纯手打《数据结构和算法》源码笔记,学完一脚踢进大厂
经历过互联网公司面试的同学大概都知道,数据结构和算法的知识技术栈是不可避免的,并且在笔试中,最重要的是靠算法题,尤其像头条这种大厂公司,上来就是算法题,答不出来的基本面试机会也不会有了。
|
15天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
6天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
9天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
903 29
|
9天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
644 52