97、什么是虚拟继承
2021/7/11 6:09:27
本文主要是介绍97、什么是虚拟继承,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
由于C++支持多继承,除了public、protected和private三种继承方式外,还支持虚拟(virtual)继承, 举个例子:
#include <iostream> using namespace std; class A{} class B : virtual public A{}; class C : virtual public A{}; class D : public B, public C{}; int main() { cout << "sizeof(A):" << sizeof A <<endl; // 1,空对象,只有一个占位 cout << "sizeof(B):" << sizeof B <<endl; // 4,一个bptr指针,省去占位,不需 要对齐 cout << "sizeof(C):" << sizeof C <<endl; // 4,一个bptr指针,省去占位,不需 要对齐 cout << "sizeof(D):" << sizeof D <<endl; // 8,两个bptr,省去占位,不需要对 齐 } 上述代码所体现的关系是,B和C虚拟继承A,D又公有继承B和C, 这种方式是一种菱形继承或者钻石继承,可以用如下图来表示
虚拟继承的情况下,无论基类被继承多少次,只会存在一个实体。虚拟继承基类的子类中,子类会增加某种形式的指针,或者指向虚基类子对象,或者指向一个相关的表格;表格中存放的不是虚基类子对象的地址,就是其偏移量,此类指针被称为bptr,如上图所示。如果既存在vptr又存在bptr,某些编译器会将其优化,合并为一个指针。
这篇关于97、什么是虚拟继承的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-07面向对象编程基础:初学者指南
- 2024-09-07数据结构入门:了解基础概念与简单应用
- 2024-09-07面向对象编程入门:掌握基本概念与实践
- 2024-09-07数据结构入门:从基础概念到基本操作
- 2024-09-07从零开始学数据库:入门级指南与实操技巧
- 2024-09-07综合设备故障分析与预防:实例代码与优化策略
- 2024-09-07数据库入门:轻松掌握数据管理基础
- 2024-09-07面向对象入门:快速掌握对象编程基础
- 2024-09-07数据库教程:入门与实践指南
- 2024-09-07面向对象开发教程 - 从零基础到实践应用的进阶之路