C++ 怎么解决菱形继承

简介: C++ 怎么解决菱形继承

一、什么是菱形继承?

前提: c++ 具备其他语言没有的多重继承的特性

一个子类可以继承自多个父类,这些父类可能继承自相同的父类,从而造成了菱形继承

二、菱形继承有什么问题?

  • 浪费存储空间
  • 造成二义性

三、怎么解决菱形继承?虚继承

  • 子类只继承一次父类的父类
  • 继承的时候带上 virtual 关键字

四、虚继承底层实现原理

查看内存

gcc8.0之前 :  g++ -fdump-class-hierarchy *.cpp  
gcc8.0及以后 :g++ -fdump-lang-class *.cpp
  • 通过虚表指针偏移来实现虚继承
  • 父类的 vptr 都有到共同基类的偏移量,从而让子类多继承时指向同一个“父类的父类”

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs


相关文章
|
4天前
|
Java C++
C++的学习之路:21、继承(2)
C++的学习之路:21、继承(2)
14 0
|
29天前
|
C++
8. C++继承
8. C++继承
22 0
|
29天前
|
安全 Java 编译器
C++:继承
C++:继承
32 0
|
1月前
|
安全 Java 编译器
C++:继承与派生
C++:继承与派生
|
1天前
|
设计模式 编译器 数据安全/隐私保护
C++ 多级继承与多重继承:代码组织与灵活性的平衡
C++的多级和多重继承允许类从多个基类继承,促进代码重用和组织。优点包括代码效率和灵活性,但复杂性、菱形继承问题(导致命名冲突和歧义)以及对基类修改的脆弱性是潜在缺点。建议使用接口继承或组合来避免菱形继承。访问控制规则遵循公有、私有和受保护继承的原则。在使用这些继承形式时,需谨慎权衡优缺点。
12 1
|
1月前
|
安全 编译器 程序员
C++中的继承
C++中的继承
22 2
|
1月前
|
算法 编译器 程序员
【C++ 泛型编程 入门篇】全面掌握C++元模板中的模板继承:模板继承深入指南和教程
【C++ 泛型编程 入门篇】全面掌握C++元模板中的模板继承:模板继承深入指南和教程
37 0
|
1月前
|
Java 编译器 C#
【C++ 继承的多样性】C++ 多继承与虚拟继承:探究核心原理与应用实践
【C++ 继承的多样性】C++ 多继承与虚拟继承:探究核心原理与应用实践
37 1
|
1月前
|
算法 编译器 程序员
【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。
81 0
|
1月前
|
设计模式 算法 数据库
【C++ 继承】C++继承解密:一步步引领您从基础到实战
【C++ 继承】C++继承解密:一步步引领您从基础到实战
64 0