一、构造函数
-
构造函数的名字和类相同
-
构造函数没有返回类型
-
构造函数和普通函数一样有一个参数列表(可以为空)和一个函数体(可以为空)
-
类可以包含多个构造函数,但构造函数之间必须保证参数数量或者参数类型不同(这 一点和重载函数有点像)
-
构造函数不可以声明成const的
二、默认构造函数
-
如果类内存在初始值,就用它初始化成员;如果不存在类内初始值,则默认初始化该成员(编译器自动合成默认构造函数)
默认初始化原则:
1)每个类自己决定初始化的方式
2)绝大多数类都支持非显示初始化定义对象,它们会为对象提供一个合适的初值
struct Sales_data
{
string bookNo;//string 类会给没初始化的对象一个空串
unsigned units_sold = 0;//直接使用它初始化成员
double revenue = 0.0;
};
- 在以下三种情况下,必须自己定义默认构造函数
1)编译器只有发现类没有声明任何构造函数的情况下才会自动生成构造函数
2)对于某些类来说,合成的默认构造函数可能执行错误的操作,譬如在创建类的对象的时候会得到未定义的值。(定义在函数体之外的变量一般初始化为0,一般发生在定义在块中的内置类型或复合类型是默认初始化的,那么他们的值是未定义的)
3)编译器不能为某些类合成默认的构造函数,譬如这个类当中包含其他类类型成员,但该成员没有默认构造函数,编译器无法初始化它