1、构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数
2、没有返回类型,函数名与类名相同
3、不能被声明为const,当创建一个const类对象时,构造函数完成后才具备“常量”属性
合成的默认构造函数
1、什么是合成的默认构造函数?编译器自动生成的默认构造函数
默认构造函数包括合成的默认构造函数和自定义的默认构造函数,默认构造函数无任何实参
2、合成的默认构造函数的初始化规则:
1)如果存在类内的初始值,用它来初始化成员
2)否则,默认初始化该成员(个人认为这里的成员特指类类型成员,因为在函数体内的内置类型和复合类型初始化值是未定义的)
3、适用于合成的默认构造函数的有:
合成的默认构造函数只适用于简单的类,普通的类必须定义它自己的默认构造函数
1)只有当类没有声明任何构造函数时,编译器才会自动的生成构造函数
已经定义了其他的构造函数的类,是不能用合成默认构造函数(要么自定义默认构造函数,否则,该类无默认构造函数)
2)类有内置类型或者复合类型的成员,当且仅当这些成员都被赋予了类内初始值时,该类才适用于合成的默认构造函数
3)类含有一个其他类类型成员且这个成员的类有默认构造函数,(这里注意,如果类中有内置类型或者复合类型的成员且无类内初始值,那么该类进行合成的默认构造函数仅仅针对这个类类型的成员)
若类含有一个其他类类型成员且这个成员的类无默认构造函数,必须自定义默认构造函数。
自定义的默认构造函数
1、例如Sales_Data() = default; (c++ 11,若在类内定义则是内联的,类外定义则不是)
2、如果一个构造函数为所有参数提供了默认实参,则它实际上也定义了默认构造函数
默认构造函数的作用
1、默认初始化时会自动执行默认构造函数
1)在块作用域内不使用任何初始值定义一个非静态变量(类类型如string)或者数组时
2)类含有一个其他类类型成员且使用合成的默认构造函数
3)当类类型的成员没有在构造函数初始值列表中显示地初始化时(没有出现在构造函数初始列表中的成员要么类内初始值要么执行默认构造函数)
2、值初始化时自动执行默认构造函数:
1)数组初始化时提供的初始值少于数组大小时
2)没有使用初始值定义一个局部静态变量时
3)通过书写形如T()的表达式显式的请求值初始值时,如vector<int> a(10),即初始值为0