C++中构造函数的四个特点:
1、必须公有(一般声明对象是在类外声明,构造函数会被编译器自动调用)
2、无返回值
3、构造函数名与类名相同
4、构造函数可以带参数也可以不带参数
构造函数可以分为三种:默认构造 标准非默认构造 普通非默认构造
默认构造函数:不传递任何参数就可以被调用的构造函数(本身没有参数或者有参数但每个参数都有默认值)
标准非默认构造: 参数都没有默认值
普通非默认构造:自右往左依次有默认值但不是全部都有
以下两种情况的构造函数不能同属存在:
1、默认构造:不带参数的默认构造 和 带参数但是参数都有默认值的默认构造不能同时出现
2、非默认构造:参数都没有默认值的非默认构造 和 自右往左依次有默认值但不是全部都有默认值的非默认构造
补充:类中没有定义任何一个构造函数,编译器会自动生成一个默认构造函数,这个函数本身不带参数。如果类中定义了构造函数(默认,非默认,拷贝构造),此时编译器都不会再提供默认构造函数。
初始化列表:
为什么使用初始化列表:有些成员变量的初始化只能使用初始化列表(即只能在生命时初始化)
只能使用初始化列表的变量:
1、常量成员:因为常量只能初始化不能作赋值修改,所以必须放在初始化列表中
2、引用类型:引用必须在定义时初始化,不能重新赋值,所以也要放在初始化列表中
3、没有默认构造函数的类类型成员变量,因为使用初始化列表不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化
初始化列表优先于函数体执行
初始化列表中的成员变量初始化初始化顺序取决于成员变量在类中的声明顺序