今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员。

派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的

class  Rectangle : public Shape {public:Rectangle () : id(1234), name("Rectangle")  { // id: 父类Shape成员, name 子类Rectangle成员   }};

  本着严谨的负责态度,说出去的要保证是经过检验的。这里涉及到到一个基本的问题, 子类的参数初始化列表与父类构造函数哪个先执行?
   教科书上已经给了我们答案: 派生类构造函数会默认调用基类的默认父类函数。
毫无疑问,应该是父类的构造函数先执行。那么参数初始化列表什么时候执行呢?
口说无凭,我们写个例子看看实际的执行情况。

#include <iostream>
#include <string>
using namespace std;class Shape {public:Shape() {cout<< "Shape strutured"<<endl;}private:string id;
};class Bound {public:Bound(int line) {cout<<"Bound "<<line<<endl;}
};class Triangle : public Shape {public:Triangle() : version("1.0"),name("triagnle"),bd(4) {cout<<"Triangnle"<<endl;}
private:string version;string name;Bound bd;
};int main()
{Triangle tg;return 0;
}
Shape strutured
Bound 4
Triangnle

从执行结果上看正印证了上面的结论,基类的构造函数为先执行,参数初始化列表随后执行,但又优先于派生类的构造函数内代码先执行。

派生类参数初始化列表和基类构造函数顺序相关推荐

  1. 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )

    文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...

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

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

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

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

  4. 类的初始化列表_【Flutter 111】Flutter手把手教程Dart语言——类、类的的成员变量和方法、类的构造函数...

    类 Dart是一种面向对象的语言,所有对象都是一个类的实例,而所有的类都继承自Object类.每个除了Object类之外的类都只有一个超类,一个类的代码可以在其它多个类继承中重复使用. 类的实例变量 ...

  5. ASP.NET Atlas简单控件介绍——Sys.Component基类与Sys.UI.Control基类

    作者:Dflying Chen (http://dflying.cnblogs.com/) 本系列有三篇文章: ASP.NET Atlas简单控件介绍--Sys.Component基类与Sys.UI. ...

  6. pyecharts源码解读(12)图表类包charts之chart模块:常用图表基类Chart、直角坐标系图表基类RectChart、3D图表基类Chart3D

    当前pyecharts的版本为1.9.0. pyecharts/charts/chart.py模块结构 pyecharts/charts/chart.py模块主要元素为4个类: Chart类:除复合图 ...

  7. 编写计算正方体、圆柱体、球体的表面积和体积的类。要求: (1)这三个类有一个公共的基类; (2)这三个类计算正方体、圆柱体、球体的表面积和体积的成员函数名字相同; (3)按照运行时的多态性方法设计一个

    本文为博主原创文章,未经博主允许不得转载. 版权为陈博超所有,第一次于2020年11月24日发表于BLOG上 本BLOG上原创文章未经本人许可,不得用于商业用途.转载请经允许后注明出处,否则保留追究法 ...

  8. C++类的初始化列表

    意义 初始化列表是类中构造函数的一部分,用于实例化类中变量时 赋初值. 需要先了解  构造函数的基本知识.CSDN-构造函数https://blog.csdn.net/weixin_44212838/ ...

  9. asp.net MVC中怎样让LINQ Designer自动生成的类从别的类继承并调用其基类构造器?...

    继承是比较简单的,比如在Designer.cs中有一个类叫 Text100,可以在Text.cs中直接写: public class Text //这个就是基类 { private int _leng ...

最新文章

  1. asp.net 2.0中新增的AppendDataBoundItems .dropdownlist 添加第一项
  2. 在Eclipse中制作SSH配置文件提示插件
  3. mongodb-创建索引
  4. Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
  5. python中assert_在Python中带有示例的assert关键字
  6. java 集合操作_Java 集合的操作 个人方法总结
  7. vivo NEX 3 5G真机曝光:瀑布屏+升降镜头
  8. idea 快捷删除移动_21个极大提高开发效率的VS Code快捷键
  9. Java Annotation(注解)使用教程
  10. 中国电信到美国的几条海缆线路图
  11. uniapp-蓝牙模块封装
  12. 全球第二大成人网站,黄了!
  13. docker 定时重启脚本_群晖Docker容器定时执行重启任务
  14. EasyPR转qt5-vs2013
  15. cad插入块_CAD中创建块,有一种最快捷的方式,看看你用过没?
  16. 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
  17. oracle包与实体包,实体oracle数据库学习
  18. 深入理解什么是LSM-Tree
  19. 关于ALEXA的流量排名的参数介绍
  20. matlab floor函数_MATLAB图像处理:08:在交通视频中检测汽车

热门文章

  1. 4 用python进行OpenCV实战之图像变换1(平移)
  2. 抽样方法,采样方法 shuffle
  3. LeetCode简单题之查找共用字符
  4. Wide Deep的OneFlow网络训练
  5. 大规模数据处理Apache Spark开发
  6. 2021年大数据Hadoop(十四):HDFS的高可用机制
  7. Python反爬研究总结
  8. 电商商品模块数据设计与关系图
  9. [C] [二分] C语言实现快速排序
  10. MyBatis if标签的用法