派生类参数初始化列表和基类构造函数顺序
今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员。
派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的
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
从执行结果上看正印证了上面的结论,基类的构造函数为先执行,参数初始化列表随后执行,但又优先于派生类的构造函数内代码先执行。
派生类参数初始化列表和基类构造函数顺序相关推荐
- 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...
- C++学习 十五、类继承(1)基类,派生类,访问权限,protected
C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...
- 【C++】继承和派生、虚继承和虚基类、虚基类表和虚基类指针
继承和派生.虚继承和虚基类.虚基类表和虚基类指针 继承和派生 继承概述 继承基本概念 派生类中的成员 继承的内容 派生类定义 派生类访问控制 对象构造和析构 对象构造和析构的调用顺序 继承中的构造和析 ...
- 类的初始化列表_【Flutter 111】Flutter手把手教程Dart语言——类、类的的成员变量和方法、类的构造函数...
类 Dart是一种面向对象的语言,所有对象都是一个类的实例,而所有的类都继承自Object类.每个除了Object类之外的类都只有一个超类,一个类的代码可以在其它多个类继承中重复使用. 类的实例变量 ...
- ASP.NET Atlas简单控件介绍——Sys.Component基类与Sys.UI.Control基类
作者:Dflying Chen (http://dflying.cnblogs.com/) 本系列有三篇文章: ASP.NET Atlas简单控件介绍--Sys.Component基类与Sys.UI. ...
- pyecharts源码解读(12)图表类包charts之chart模块:常用图表基类Chart、直角坐标系图表基类RectChart、3D图表基类Chart3D
当前pyecharts的版本为1.9.0. pyecharts/charts/chart.py模块结构 pyecharts/charts/chart.py模块主要元素为4个类: Chart类:除复合图 ...
- 编写计算正方体、圆柱体、球体的表面积和体积的类。要求: (1)这三个类有一个公共的基类; (2)这三个类计算正方体、圆柱体、球体的表面积和体积的成员函数名字相同; (3)按照运行时的多态性方法设计一个
本文为博主原创文章,未经博主允许不得转载. 版权为陈博超所有,第一次于2020年11月24日发表于BLOG上 本BLOG上原创文章未经本人许可,不得用于商业用途.转载请经允许后注明出处,否则保留追究法 ...
- C++类的初始化列表
意义 初始化列表是类中构造函数的一部分,用于实例化类中变量时 赋初值. 需要先了解 构造函数的基本知识.CSDN-构造函数https://blog.csdn.net/weixin_44212838/ ...
- asp.net MVC中怎样让LINQ Designer自动生成的类从别的类继承并调用其基类构造器?...
继承是比较简单的,比如在Designer.cs中有一个类叫 Text100,可以在Text.cs中直接写: public class Text //这个就是基类 { private int _leng ...
最新文章
- asp.net 2.0中新增的AppendDataBoundItems .dropdownlist 添加第一项
- 在Eclipse中制作SSH配置文件提示插件
- mongodb-创建索引
- Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
- python中assert_在Python中带有示例的assert关键字
- java 集合操作_Java 集合的操作 个人方法总结
- vivo NEX 3 5G真机曝光:瀑布屏+升降镜头
- idea 快捷删除移动_21个极大提高开发效率的VS Code快捷键
- Java Annotation(注解)使用教程
- 中国电信到美国的几条海缆线路图
- uniapp-蓝牙模块封装
- 全球第二大成人网站,黄了!
- docker 定时重启脚本_群晖Docker容器定时执行重启任务
- EasyPR转qt5-vs2013
- cad插入块_CAD中创建块,有一种最快捷的方式,看看你用过没?
- 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
- oracle包与实体包,实体oracle数据库学习
- 深入理解什么是LSM-Tree
- 关于ALEXA的流量排名的参数介绍
- matlab floor函数_MATLAB图像处理:08:在交通视频中检测汽车