美文网首页
C++之虚继承

C++之虚继承

作者: wenmingxing | 来源:发表于2018-10-04 15:13 被阅读17次

本文主要介绍C++中虚继承的相关内容

I、菱形继承

要了解C++的虚继承,首先要先了解菱形继承的概念及其带来的危害。

1、菱形继承是指一个派生来通过不同的继承途径,继承了同一个基类的内容,如下图所示:

多重继承示意图

2、上图中的继承关系会造成两个方面的影响,一是派生类D会存在两份基类A中的拷贝,这样会造成内存的浪费,而是在发生动态绑定时,会存在虚函数调用的二义性

II、虚继承

1、虚继承就是为了解决上述的两个问题,虚继承的机构如下图所示:

2、虚继承的底层实现 :

虚继承一般通过虚基类指针虚基类表实现,每个虚继承的子类都有一个虚基类指针和虚基类表(由虚基类指针指向)。

虚基类表中记录了虚基类与本类的偏移地址;通过偏移地址,就找到了虚基类成员,而虚继承也不用像普通多重继承一样需要维护两份拷贝,这样节省了存储空间。

3、上述描述解决了菱形继承中的浪费内存空间的问题,但还未解决二义性问题,在虚继承中,如果B和C都重写了A中的虚函数a(),则D必须重写虚函数a(),否则会出现二义性问题。

详细内容可以参考探索多态模型—菱形继承和菱形虚拟继承一文。

相关文章

  • C/C++32位与64位数据类型占用的字节数

    C++继承、虚继承、虚函数类的大小问题

  • C++之虚继承

    本文主要介绍C++中虚继承的相关内容 I、菱形继承 要了解C++的虚继承,首先要先了解菱形继承的概念及其带来的危害...

  • c++虚继承

    什么时候用到虚继承 虚继承和虚函数是完全无相关的两个概念。 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继...

  • C++语言-多态,纯虚函数,模版函数

    1、虚函数、纯虚函数 需要注意的是,纯虚函数子类是必须继承的,虚函数不是不必须继承的。 2、多态 在C++中默认关...

  • C++编程知识分享:C++对象模型(二)

    话不多聊,我们接着来看! C++对象模型中加入虚继承 虚继承是为了解决重复继承中多个间接父类的问题的,所以不能使用...

  • 2020-02-17-C++虚继承机制

    C++ 中出现多继承,当多继承就会出现 两个父类的复制,这样就出现了虚继承机制。 A 继承 ZB继承 ZC 继承 ...

  • 虚继承和虚函数

    虚继承和虚函数 虚继承和虚函数是毫不相关的两个概念,但是在实现上又有所类似;虚函数是C++中实现多态的一个重要手段...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 8-C++远征之继承篇-学习笔记

    C++远征之继承篇 开篇介绍 整个C++远征计划: 起航->离港->封装->继承 为什么要用继承? 为什么要有继承...

  • C++虚继承和虚函数

    虚继承是指在类继承时,使用关键字virtual,如class B : virtual public A { ......

网友评论

      本文标题:C++之虚继承

      本文链接:https://www.haomeiwen.com/subject/xbowwftx.html