C++构造函数 ,初始化列表
来源:互联网 发布:淘宝可以买保健品吗 编辑:程序博客网 时间:2024/06/06 12:41
C++中的类的构造函数:
1.如果类中没有定义构造函数,编译器将生成一个默认构造函数,这个默认构造函数会调用类中所有成员的默认构造函数,但不会对如int,double的基本数据类型做初始化;
2.类中可以定义多个构造函数,但每个构造函数应该有不同的参数实现;
3.默认构造函数必须定义的情况,当需要定义一个对象数组时,默认构造函数必须定义,因为系统会为每个对象分配空间并调用其默认构造函数,此时不能调用其它的构造函数;如:objectDemo tempDemo[10];//此时objectDemo必须有默认构造函数
默认构造函数就是0参数的构造函数;
初始化列表的使用:
1.初始化列表的格式,
objectDemo::objectDemo():mValue(10),mString("test") //此时mValue,mString的值使用初始化列表进行初始化
{
}
2.初始化列表的效率比构造函数中赋初值高,因为初始化列表在分配内存的同时给变了赋值,构造函数需要创建对象后再调用构造函数赋值;
3.const变量赋初值必须使用初始化列表,
//objectDemo.h
class objectDemo
{
const int kDefaultMax;//当然你也可以直接在这里赋值,但是他就不能随特定对象改变了。
...
}
//objectDemo.cpp
objectDemo::objectDemo():kDefaultMax(1000)
{
}
4.还有如下情况也要使用初始化列表
a.数据类型为引用数据成员时;
//objectDemo.h
class objectDemo
{
int &tempData; //引用数据成员
...
}
b.没有默认构造函数的对象数据成员;
//objectDemo.h
class objectDemo
{
objectBuff mObjectBuff; //objectBuff对象没有默认构造函数
...
}
//objectDemo.cpp
objectDemo::objectDemo():mObjectBuf(10*1024)
{
}
c.没有默认构造函数的超类;
//objectDemo.h
class objectDemo:objectParent //此父类没有默认构造函数
{
...
}
//objectDemo.cpp
objectDemo::objectDemo():objectParent("Good Boy")
{
}
后面三个不知道正不正确,知道的告诉我下,呵呵。
5.初始化列表有个重要问题需要清楚,变量被初始化的顺序不是初始化列表中的顺序,而是类中变量的定义顺序进行的。
- 【C/C++】构造函数的初始化列表
- 构造函数初始化列表(C++)
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 运算符重载
- XHTML总结
- 关于js setInterval setTimeout
- Pass-Muraille
- 获取当天的订单--以半小时为单位的报表
- C++构造函数 ,初始化列表
- java.lang.Error: Unresolved compilation problem.
- vss中多个sln包含同一个项目文件时反复牵出的问题。
- matlab图像的邻域操作与块操作
- 用JS选取DropDownList2 的值
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- 在页面上通过JavaScript控制表格的隐藏和显示
- java--值传递和引用传递
- 使用CString要当心'/0'结束符