构造函数--类对象初始化

记录构造函数的形式,用法。

定义

类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。

构造函数的名字和类名相同。和其他函数不一样的是,构造函数没有返回类型,单有一个(可能为空的)参数列表和一个(可能为空的)函数体。类可以含有多个构造函数,但不同的构造函数之间必须在参数数量或参数类型上有所区别。

默认构造函数

如果我们的类没有显式定义构造函数,编译器会隐式构造一个默认构造函数。这个默认构造函数初始化数据成员的方式:

  • 如果存在类内初始值,用它来初始化成员。
  • 否则,默认初始化该成员。

但是建议自定义构造函数,理由:

  1. 只有在类没有声明任何构造函数时,编译器才会自动生成默认的构造函数。一旦我们声明的其他构造函数,类将没有默认的构造函数。
  2. 如果定义在类内的内置类型或复合类型(比如指针或数组)的对象被默认初始化时,则它的值是未定义的。
  3. 有时候编译器无法为某些类合成默认的构造函数,比如类内含有其他类类型的数据成员且这个成员没有默认构造函数时,编译器无法初始化该成员。

形式

1
2
3
4
5
6
7
struct Sales_data{
Sales_data() = default; //默认构造函数

Sales_data() = (const std::string &s): bookNo(s){} //显式初始化一个,隐式初始化两个

Sales_data() = (const std::string &s, unsigned &s ,double p): bookNo(s),units_sold(n),revenue(p*n){} //显式初始化三个
}
updatedupdated2019-12-282019-12-28