在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
来源:互联网 发布:数据库sw是什么缩写 编辑:程序博客网 时间:2024/04/30 15:08
但是继承类构造对象时就有点复杂了:
int main(){ Derived cDerived(1.3); // use Derived(double) constructor return 0;}构造子类对象时具体c++具体做了:
- 为子类对象cDerived 分配内存(为父类和子类分配足够的内存)
- 调用合适的子类构造函数
- 先用合适的基类构造函数构造基类对象
- 初始化列表对成员函数进行初始化
- 执行构造函数
- 返回
记住很重要的一点事:构造子类时,基类构造函数先要被调用(调用无参数的默认构造函数),在此之前子类构造函数什么都不能做。
初始化基类成员函数
我们的子类这样定义有一个很大的弊端就是不能初始化继承来的m_nValue变量。如果在构造子类对象时,想同时设置子类变量m_dValue和父类变量m_nValue的值,该怎么办呢?
c++新手可以这么设计子类:
但是,c++不运行在子类构造函数的初始化成员列表中对父类的成员变量进行初始化。换句话说,初始化成员列表只能初始化本类的成员变量。
为什么c++这么规定呢?原因是要考虑到const变量和reference变量。如果变量m_nValue是const,赋值不可改变,该变量在定义的时候就必须初始化。父类对m_nValue定义是赋值,而子类构造函数再去对它初始化,那么这个const变量就有可能会别改变。为了防止这种情况的发生,c++才作此规定。
那么怎么才能在构造子类对象时合适地对继承来的变量m_nValue赋值呢?
可用在子类的构造函数的初始化成员列表中调用父类的构造函数。
现在:
int main(){ Derived cDerived(1.3, 5); // use Derived(double) constructor return 0;}
执行细节:
- 为子类对象cDerived分配内存
- 调用子类构造函数,发现有dValue = 1.3, nValue = 5
- 编译器查找基类是否有特殊的构造函数,有!那就掉用参数nValue = 5的构造函数Base(int)
- 基类初始化参数列表将基类成员变量m_nValue 设置为 5
- 执行基类构造函数体
- 基类构造函数返回
- 子类参数化列表设置成员变量m_dValue 为 1.3
- 执行子类构造函数体
- 子类构造函数返回
1 0
- 在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
- 在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
- 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况
- c++中什么类型的成员变量只能在构造函数的初始化列表中进行
- 必须在构造函数的成员初始化列表里初始化
- C++成员变量的初始化顺序如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
- 构造函数初始化列表中成员变量必须初始化的几种情况
- 构造函数中,哪些成员变量一定要通过初始化列表来初始化
- 构造函数的成员初始化列表
- C++构造函数对类成员变量初始化,使用初始化列表和构造函数内部直接赋值 的区别
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- C++类构造函数初始化列表及初始化成员变量的误区
- 没有默认构造函数的问题, 对于类成员变量有别的类成员,则在类 构造函数中也必须对那个类成员变量进行初始化,除非那个类 成员有默认构造函数
- c++ 构造函数初始化列表,构造函数的调用顺序
- 构造函数、初始化列表的调用顺序
- 为什么 没有缺省构造函数的类类型成员 必需要在初始化列表 里初始化 ?
- C++中使用初始化列表比在构造函数中对成员变量赋值更高效
- C++中类的构造函数与析构函数(成员初始化列表)
- java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
- JQuery+ajax+jsonp 跨域访问
- 在Ubuntu 12.04安装和设置Samba实现网上邻居共享
- STK简介
- Cairo 图形指南 (2) —— Cairo 概念
- 在构造函数的参数化列表中调用基类构造函数初始化继承来的成员变量
- 火狐收藏夹在浏览器左侧打开
- 畅通工程(杭电1863)
- IOS 长链接操作处理
- Quick-cocos2d-x-3.2中示例Coinfilp解析(五)
- Android中关于线程使用的几点注意事项
- Cairo 图形指南 (3) —— Cairo 后端
- HDOJ 题目3485 Count 101(递推)
- 工作笔记----写代码应注意的问题