规则:如果父类中有虚基类(A),且有一个直接基类(B)是虚基类的子类,那么子类(C或D)若不显式调用虚基类的有参数构造函数,它的直接基类(B)即使在构造列表中调用了非默认构造函数,那么也会直接调用虚基类的默认构造函数。

#include <iostream>
using namespace std;const int CONST = 1;
#define CC CONSTclass A{
public:A(int){cout<<"A(int)"<<endl;}A(){cout<<"A()"<<endl;}
};
class B: virtual public A{
public:B(int):A(CC){cout<<"B(int)"<<endl;}B(){cout<<"B()"<<endl;}
};
class C: public B, virtual public A{
public:C(int):B(CC){}
};
class D: public B, virtual public A{
public:D(int):B(CC), A(CC){}
};int main(){C c(CC);D d(CC);
}

运行结果:

A()
B(int)
A(int)
B(int)

多继承中虚基类构造函数的一种调用规则相关推荐

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

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

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

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

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

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

  4. C++ 虚拟继承与虚基类

    1.多重继承带来的问题 C++ 虚拟继承一般发生在多重继承的情况下.C++ 允许一个类有多个父类,这样就形成多重继承.多重继承使得派生类与基类的关系变得更为复杂,其中一个容易出现问题是某个基类沿着不同 ...

  5. C++:94---类继承(菱形继承、虚继承(virtual虚基类))

    一.菱形继承 在介绍虚继承之前介绍一下菱形继承 概念:A作为基类,B和C都继承与A.最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不 ...

  6. C++中虚基类相关的知识点

    目录 前言 虚基类的作用 虚基类的声明 虚基类的初识化 前言 在上一篇的文章中我们知道了, C++语言是知识多继承的,并且一个子类可以有多个父类子类,拥有所有父类的成员变量,子类会继承父类的所有成员函 ...

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

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

  8. C++类的多继承和虚基类

    文章目录 前言: 1.多重继承 1.1 多重继承的概念 1.2 多重继承的用法 1.3 多重继承的弊端:二义性 2.虚基类 2.1 虚基类的概念 2.2 虚基类的初始化 2.3 使用注意事项 前言: ...

  9. [YTU]_2622(B 虚拟继承(虚基类)-沙发床(改错题))

    题目描述 有一种特殊的床,既能当床(Bed)用又能当沙发(Sofa)用,所以叫沙发床(SleeperSofa). 同时床和沙发又是一种特殊的家具(Furniture),具有一切家具的特性. 利用虚拟继 ...

最新文章

  1. vue data数据修改_史上最强vue总结,万字长文
  2. 人类在计算机设计方面已经进入了一个误区
  3. 设置progressbar进度条颜色
  4. Apache Tomcat Configuration Reference
  5. android 立体 流量球,Android自定义View——实现水波纹效果类似剩余流量球
  6. 详述白盒测试的逻辑覆盖的条件覆盖及其优缺点
  7. boot定时任务开启和关闭 spring_spring-boot 多线程并发定时任务的解决方案
  8. Linux中msiexec无法运行,使用msiexec.exe绕过应用程序白名单(多种方法)
  9. [uva] 146 - ID Codes
  10. linux系统编译qt代码需要编译qt,linux下如何静态编译QT库,以及如何静态编译自己的程序...
  11. 【转】vue中如何实现数据的双向绑定
  12. Python数据可视化 Pyecharts 制作 Map3D 三维地图
  13. 如何用计算机制作pop海报,怎么用ps制作pop海报_ps制作pop字体
  14. 性能服务器e5,英特尔至强E5服务器到底有多强?
  15. 【OpenCV 例程300篇】48. 直方图处理之彩色直方图匹配
  16. Log Parser Lizard 日志分析工具
  17. 深度搜索(DFS)和广度搜索(BFS)
  18. python 删除pdf页面_Python脚本使用pyPDF删除空白页面
  19. 用于Chrome的前端开发插件
  20. ubuntu安装mysql忘记密码并重置

热门文章

  1. (原)ubuntu中使用conda安装tensorflow-gpu
  2. static关键字用法
  3. 替换元素和非替换元素的学习
  4. MySQL 错误代码和消息
  5. windows程序移植linux
  6. [问题]DotNet 项目如何实现在构建时 Build 号自动增加?
  7. php导出excel格式数据
  8. ecshop模板smarty foreach详解 [ECshop]
  9. linux wc 命令简介
  10. ASP.NET遍历配置文件的连接字符串