在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
来源:互联网 发布:修改数据库sysdate 编辑:程序博客网 时间:2024/04/30 15:19
但是继承类构造对象时就有点复杂了:
构造子类对象时具体c++具体做了:- 为子类对象cDerived 分配内存(为父类和子类分配足够的内存)
- 调用合适的子类构造函数
- 先用合适的基类构造函数构造基类对象
- 初始化列表对成员函数进行初始化
- 执行构造函数
- 返回
记住很重要的一点事:构造子类时,基类构造函数先要被调用(调用无参数的默认构造函数),在此之前子类构造函数什么都不能做。
初始化基类成员函数
我们的子类这样定义有一个很大的弊端就是不能初始化继承来的m_nValue变量。如果在构造子类对象时,想同时设置子类变量m_dValue和父类变量m_nValue的值,该怎么办呢?
c++新手可以这么设计子类:
但是,c++不运行在子类构造函数的初始化成员列表中对父类的成员变量进行初始化。换句话说,初始化成员列表只能初始化本类的成员变量。
为什么c++这么规定呢?原因是要考虑到const变量和reference变量。如果变量m_nValue是const,赋值不可改变,该变量在定义的时候就必须初始化。父类对m_nValue定义是赋值,而子类构造函数再去对它初始化,那么这个const变量就有可能会别改变。为了防止这种情况的发生,c++才作此规定。
那么怎么才能在构造子类对象时合适地对继承来的变量m_nValue赋值呢?
可用在子类的构造函数的初始化成员列表中调用父类的构造函数。
现在:
执行细节:
- 为子类对象cDerived分配内存
- 调用子类构造函数,发现有dValue = 1.3, nValue = 5
- 编译器查找基类是否有特殊的构造函数,有!那就掉用参数nValue = 5的构造函数Base(int)
- 基类初始化参数列表将基类成员变量m_nValue 设置为 5
- 执行基类构造函数体
- 基类构造函数返回
- 子类参数化列表设置成员变量m_dValue 为 1.3
- 执行子类构造函数体
- 子类构造函数返回
转自:http://blog.csdn.net/bdss58/article/details/40348901
其他参考:http://www.cnblogs.com/GODYCA/archive/2013/01/17/2865279.html
0 0
- 在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
- 在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
- 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况
- c++中什么类型的成员变量只能在构造函数的初始化列表中进行
- 必须在构造函数的成员初始化列表里初始化
- C++成员变量的初始化顺序如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
- 构造函数初始化列表中成员变量必须初始化的几种情况
- 构造函数中,哪些成员变量一定要通过初始化列表来初始化
- 构造函数的成员初始化列表
- C++构造函数对类成员变量初始化,使用初始化列表和构造函数内部直接赋值 的区别
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- C++类构造函数初始化列表及初始化成员变量的误区
- 没有默认构造函数的问题, 对于类成员变量有别的类成员,则在类 构造函数中也必须对那个类成员变量进行初始化,除非那个类 成员有默认构造函数
- c++ 构造函数初始化列表,构造函数的调用顺序
- 构造函数、初始化列表的调用顺序
- 为什么 没有缺省构造函数的类类型成员 必需要在初始化列表 里初始化 ?
- C++中使用初始化列表比在构造函数中对成员变量赋值更高效
- C++中类的构造函数与析构函数(成员初始化列表)
- 炫酷偏好选中控件,选中状态以水波纹扩撒的形式渐显
- Tomcat 解决分布式跨域问题
- pip 命令安装selenium
- python执行系统命令
- 华为日本设立研发中心,4大“X实验室”布局5G+物联网时代
- 在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
- 利用观察者模式(发布/订阅模式)制作一个“代替”广播的通知类
- kali 使用u盘安装提示“无法挂在光盘..”的解决方案
- 安卓design的CoordinatorLayout+TabLayout隐藏Toolbar之踩过的坑
- Java Web学习之旅(初识Servlet)
- LeetCode刷题系列_43题
- 流量统计 +NetWorkStatsManager
- 当程序为横屏时,锁屏再开启会被销毁并重新执行onCreate的解决
- 关于sizeof和strlen()那些年我们都迷惑过的问题