构造函数定义:每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。
需要注意的几点:
1:构造函数不能被声明为const的,当我们创建一个const对象时,直到构造函数完成初始化过程,对象才能真正取得其“常量”属性。因此构造函数在const对象的构造过程中可以向其写值。
2:只有类中没有声明任何构造函数时,编译器才会自动地生成默认构造函数。(依据:如果一个类子某种情况下需要控制对象的初始化,那么该类很可能在所有的情况下都需要控制——摘自c++primer)
3:如果类包含有内置类型或者复合类型的成员,则只有当这些成员全都被赋予了类内的初始值时,这个类才适合于使用合成的默认构造函数。
4:如果类中含有其他类的类型的成员且这个成员的类型没有默认构造函数,那么编译器无法初始化该成员。对于这样的类我们必须自定义默认构造函数,否则该类将没有可用的默认构造函数。
5:=default的含义,在c++11新标准中,如果我们需要默认的行为,那么可以通过在参数列表的后面写上=default来要求编译器生成构造函数。其中,如果=default可以出现在类的内部也可以出现再类的外部。和其他函数一样,如果=default出现在类的内部,则默认构造函数是内联的,如果它在类的外部,则该成员默认情况下不是内联的。
6:类中的成员变量在执行构造函数之前会被默认初始化,所以在初始化列表中初始化成员变量比在构造函数内初始化成员变量效率更高。
7:成员的初始化顺序和初始化列表中的顺序无关,和在类中定义它们的顺序有关。所以要注意初始化列表的使用,防止出现在没有初始化一个变量时,用它初始化另一个变量。这是后会导致不可预知的错误。
8:如果一个构造函数为所有的参数都提供了默认实参,则它实际上也定义了默认构造函数。
9:委托构造函数。一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,或者说它把它自己的一些职责委托给其他构造函数。