虚基类及其派生类构造函数[1]

  • 建立对象时所指定的类称为最远派生类
  • 虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。
  • 在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化表中为虚基类的构造函数列出参数。如果未列出,则表示调用该虚基类的默认构造函数。
  • 在建立对象时,只有最远派生类的构造函数调用虚基类的构造函数,其他类对虚基类构造函数的调用被忽略。

有虚基类时的构造函数举例(补7-4)

#include <iostream>
using namespace std;class Base0 {
public:Base0(int var) : var0(var) { }int var0;void fun0() { cout << "Member of Base0" << endl; }
};
class Base1: virtual public Base0 {public: Base1(int var) : Base0(var) { }int var1;
};
class Base2: virtual public Base0 {
public:Base2(int var) : Base0(var) { }int var2;
};class Derived: public Base1, public Base2 {public:Derived(int var) : Base0(var), Base1(var), Base2(var) { }int var;void fun() { cout << "Member of Derived" << endl; }
};int main() {    //程序主函数Derived d(1);d.var0 = 2; //直接访问虚基类的数据成员d.fun0();   //直接访问虚基类的函数成员return 0;
}

参考

  1. ^http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043_2x_2015_T2+sp/courseware/8d1fd477f469492ba2c1297e6ace6f5d/2a889505dd584a639363f2b4e8726040/

构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...相关推荐

  1. C++中基类与派生类的构造函数和析构函数

    1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...

  2. C++基类和派生类的构造函数(二)

    基类构造函数调用规则 事实上,通过派生类创建对象时必须要调用基类的构造函数,这是语法规定.换句话说,定义派生类构造函数时最好指明基类构造函数:如果不指明,就调用基类的默认构造函数(不带参数的构造函数) ...

  3. C++ 基类和派生类的构造函数

    在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化. 解决办法: ...

  4. 基类和派生类的构造函数,隐式调用与显式调用

    1. 顺序        当创建一个派生类的对象时,系统首先自动创建一个基类对象,也就是说,在调用派生类构造函数创建派生类对象之前,系统首先调用基类的构造函数创建基类对象.当派生类对象生命期结束时,首 ...

  5. 基类、派生类、虚基类、虚函数、虚析构、纯虚函数、抽象类

    基类:被其它类通过继承方式作为父类继承的类称为基类:描述派生类的统一种类的方式. 派生类:通过继承其他类(并可能含有自定义成员)实现的子类:为提高代码的重用性及与同样继承于同一个父类的其它类形成统一种 ...

  6. 深剖基类和派生类的虚函数表

    1.当派生类实现基类的虚函数时,基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数地址不同: 当派生类不实现基类的虚函数时,基类中虚函数表和虚函数地址和派生类中虚函数表和虚函数的地址相同. 1.派生 ...

  7. c++ 基类和派生类的虚函数表是否为同一个

    总结 派生类实现基类的虚函数时,基类中虚函数表和派生类的虚函数表地址不同,基类虚函数表中的虚函数地址和派生类虚函数表中的虚函数地址不同: 派生类不实现基类的虚函数时,基类中虚函数表和派生类中虚函数表地 ...

  8. C++学习 十五、类继承(1)基类,派生类,访问权限,protected

    C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...

  9. 派生类到基类的转换 和基类到派生类的转换

    一. 基类与派生类的转换     3种继承方式(公用.保护.私有继承)中,公用派生类才是基类真正的子类型,它完整地继承了基类的功能.     不同类型数据之间在一定条件下可以进行类型的转换.基类与派生 ...

最新文章

  1. hacktoberfest_Hacktoberfest 2018:如何获得免费衬衫—即使您是编码新手
  2. php未登录跳到登陆页面,vue实现未登录跳转到登录页面的方法
  3. 分布式架构的分布式文件系统
  4. 2.1.3码元、波特、速率、带宽
  5. 如何把数据库从sql变成mysql_(转)如何将数据库从SQL Server迁移到MySQL
  6. SGU---104 DP
  7. mysqldump 工具的使用
  8. Atitit cs计算机科学概论 艾提拉解读版 2. 第二部分 信息层 4 5. 第三部分 硬件层 5 8. 第四部分 程序设计层 7 13. 第五部分 操作系统层 10 16. 第六部分 应
  9. vuereact视频截图
  10. 根据题3.9图的公差要求填写题3.9表,并绘出动态公差带图【(σ゚∀゚)σ..:*☆哎哟不错哦】
  11. 第六次团队作业——Alpha冲刺之事后诸葛亮
  12. Windows系统如何关闭防火墙保姆式教程,超详细
  13. 利用EXCEL计算标准差。
  14. lambda函数 python菜鸟教程-python
  15. 手机开热点如何查看接入热点的所有ip
  16. 学计算机心得体会50字,阅读心得体会50字
  17. Android应用模拟返回键、home键
  18. postman生成时间戳,未来时间戳
  19. Chap3_数据预处理
  20. 【Windows日志】记录系统事件的日志

热门文章

  1. .NET Core IoT 入门指南:(三)使用 I2C 进行通信
  2. 修复迁移后Net Standard项目中的错误
  3. 老衣的微服务实践简要指引2017版
  4. 入门干货之用DVG打造你的项目主页-Docfx、Vs、Github
  5. ASP.NET Core使用静态文件、目录游览与MIME类型管理
  6. DDD理论学习系列(5)-- 统一建模语言
  7. 一步步学习EF Core(1.DBFirst)
  8. 青客宝团队redis内部分享ppt
  9. Stateless 3.0——.NET Core上的状态机库
  10. 微软加入Linux基金会共建开源生态,并对谷歌加入.NET社区的举措表示欢迎