构造函数初始值列表
来源:互联网 发布:linux中录入历史字符 编辑:程序博客网 时间:2024/06/05 02:36
在 C++编程的过程中,我们对构造函数通常有以下两种写法:
zhangteng::zhangteng(int a,int b):age(a),score(b){}
zhangteng::zhangteng(int a,int b)
{
private:
age=a;
score=b;
}
前者被称为初始值列表法,后者则是初始化与赋值分开。
在程序的编写过程中,最好养成使用初始值列表的习惯。原因有两个:
1.底层效率问题:前者效率优于后者
2.一些数据成员(例如常量对象、引用、某种未提供默认构造函数的类类型)必须使用初始化列表的方法,使用赋值的方法会出现问题。
zhangteng::zhangteng(int a,int b)
{
age=a;
score=b;
}
private:
const int age;
int & score;
上述写法是不对的。
因为如果没有构造函数的初始值列表显示的初始化成员,则该成员将在构造函数体之前执行默认初始化。
也即在执行age=a;score=b;之前系统已经默认对age和score执行了默认赋值。而age是定义为常int型变量,我们不能对其进行二次赋值,这是显而易见的。而score作为引用变量,也是不能进行二次赋值的。具体原因我们举个例子来说明:
int a=6,b=9;
int &c=a;
c=b;
这三条语句在语法上是没有问题的,但分析一下其结果,a和b和c的值都会变为9,而c仍然是a的引用而不是b.也就是说引用二次赋值,在语法上是没有问题的,但往往在逻辑功能上已经背离了程序设计的初衷。
所以我们要杜绝这种做法。
成员的初始化顺序与他们在类定义中出现的顺序一致,构造函数初始值列表的前后位置关系不会影响实际的初始化顺序。
- 构造函数初始值列表
- 类构造函数初始值列表
- C++构造函数初始值列表
- 由C++构造函数初始值列表想到的
- 构造函数成员初始值列表(member initialization list)
- 必须在构造函数基/成员初始值设定项列表中初始化
- C++构造函数成员初始值问题
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- MySQL数据类型详解
- 2016sdau课程练习专题二 1004
- 2016.4.19记录
- shell env
- 博客搬家 from csdn to cnblog
- 构造函数初始值列表
- C#调试小技巧
- Java对象的序列化和反序列化
- 汇编-字符串的复制
- Android平台进行数据存储的五大方式
- 关于Android bound Service 攻击和防御
- mail 发送插件 BASP21 DLL
- 欢迎使用CSDN-markdown编辑器
- Android API Guides---Creating an Input Method