虚继承

当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:

class CBase { };
class CDerive1:virtual public CBase{ };
class CDerive2:virtual public CBase{ };
class CDerive12:public CDerive1,CDerive2{ };

则在类CDerive12的对象中,仅有类CBase的一个对象数据。

虚析构函数

如果没有虚析构函数,父类指针delete对象就只会调用父类的析构函数,如果加上虚析构函数的话,那么,析构父类指针指向的子类对象时候会先调用子类的析构函数,再调用父类的构造函数。

class Parent
{public:int a;Parent(){cout << "父亲的构造函数" << endl;}virtual ~Parent() {cout << "父亲的析构函数" << endl;}
};class Child : public Parent
{public:Child(){cout << "子类的构造函数" << endl;}virtual ~Child(){cout << "子类的析构函数" << endl;}
};

C++虚继承和虚析构函数相关推荐

  1. C++中的各种“虚“-- 虚函数、纯虚函数、虚继承、虚基类、虚析构、纯虚析构、抽象类讲解

    C++中的各种"虚" 1. 菱形继承 1.1 虚继承 && 虚基类 1.2 虚基类指针(vbptr)&& 虚基类表(vbtable) 2. 多态 2 ...

  2. 【C++】继承和派生、虚继承和虚基类、虚基类表和虚基类指针

    继承和派生.虚继承和虚基类.虚基类表和虚基类指针 继承和派生 继承概述 继承基本概念 派生类中的成员 继承的内容 派生类定义 派生类访问控制 对象构造和析构 对象构造和析构的调用顺序 继承中的构造和析 ...

  3. C++中的虚继承与虚基类

    1.Cpp中的虚继承与虚基类 在多继承时,很容易产生命名冲突的问题,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示: 类A派 ...

  4. 多重继承、虚继承与虚基类

    一.多重继承 单重继承--一个派生类最多只能有一个基类 多重继承--一个派生类可以有多个基类 class 类名: 继承方式 基类1,继承方式 基类2,-. {-.}; 派生类同时继承多个基类的成员,更 ...

  5. c++虚继承和虚函数和抽象类、接口类,聚合类

    虚继承 虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间.存在二义性). 底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间, ...

  6. C++虚继承与虚函数

    虚继承和虚函数是完全无相关的两个概念. 虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝.这将存在两个问题:其一,浪费存储空间:第二,存在二义性问题,通常可 ...

  7. C++虚函数,虚函数表,虚继承,虚继承表

    一.虚函数 类中用virtual关键字修饰的函数. 作用:主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的 ...

  8. 继承、虚继承、虚函数内存分布(MSVC下)

    前提知识: 对象的内存中只包含成员变量,存储在栈区或堆区(使用 new 创建对象): 成员函数与对象内存分离,存储在代码区. 对象的大小,可以自己分析,int 四个字节,指针也是四个字节.(在x86中 ...

  9. C++_虚继承_虚函数_纯虚函数(多继承的二义性,多态)

    基本信息 每一个类都有一个虚表,以及虚表指针; 虚表的内容是编译器决定的,虚表中用于存放虚函数的指针, 程序运行时的类型信息等; 每个多态对象都存放着一个指向当前类型的虚表的指针, 该指针在构造函数中 ...

最新文章

  1. blackberry Jvm error 104 错误(Device Simulator)
  2. Graphviz样例之无向图
  3. CentOS7.4下DNS服务器软件BIND安装及相关的配置(一)
  4. 面试官让我讲讲Unicode,我讲了3秒说没了,面试官说你可真菜
  5. springboot 自动装配_Java互联网架构-SpringBoot自动装配核心源码剖析
  6. 深度理解do{} while(0)语句的作用
  7. java 爬中 验证码识别_JAVA爬虫---验证码识别技术(一)
  8. System Control Processor Firmware简介
  9. python实现新闻网站_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?
  10. Python3学习笔记2:简易Web爬虫
  11. 最新cocoaPods安装、升级、卸载及删除库命令(持续更新)
  12. (转)基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理...
  13. 复杂场景下的多目标跟踪 --心得
  14. 机器学习算法篇:最大似然估计证明最小二乘法合理性
  15. VBS代码--很恶心的整人效果
  16. 搭建网站流程说明和六个关键步骤
  17. 太壹币——中国互金区块链组长李礼辉:发达国家对虚拟货币态度正在转变
  18. linux如何查看x windows,X windows
  19. 4g上网宝显示无服务器,八天真实体验 华为EC5373 LTE上网宝
  20. 阿拉伯数字和中文大写形式的相互转换

热门文章

  1. 关闭笔记本睿频,用于控制温度
  2. 新形势下保险机遇与机会(加微信有高级课程赠品)
  3. RHI_Shader Compare(HLSL、GLSL、MSL 、WGSL、OpenCL) Debug All
  4. 损失函数(Loss function)、代价函数(成本函数)(Cost function)、目标函数(objective function)的区别与联系
  5. anaconda 安装 scipy
  6. Python模块详细介绍
  7. JAVA“包“的概念
  8. linux设置远程桌面连接不上去,Linux设置VNC远程桌面连接
  9. 鸿蒙2 0是真的吗,大招来了!鸿蒙2.0正式被确认,华为Mate40或将首发?
  10. macOS快速隐藏文件和文件夹以及取消隐藏的方法