构造函数

构造函数特点:

  • 默认提供无参构造,如何用户自定义有参构造将不再提供无参构造,需要用户自己定义一个无参构造。
  • 构造函数可以重载,不像析构函数是不能重载的。
  • 构造函数建议采用初始化列表初始化,初始化顺序要和成员变量声明的顺序保持一致。
  • 构造函数的参数也可以按从右向左规则赋默认值,同样的,如果构造函数的声明和定义分开写,只用在声明或定义中的一处设置参数默认值,一般建议在声明中设置默认值。
  • C++11之后,普通的数据成员也可以在声明时就进行初始化(类似于默认值的性质)。但一些特殊的数据成员初始化只能在初始化列表中进行,故一般情况下统一推荐在初始化列表中进行数据成员初始化。

 

类的数据成员中有指针时,意味着创建该类的对象时要进行指针成员的初始化,需要申请堆空间。

在初始化列表中申请空间,在函数体中复制内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Computer {
public:
Computer(const char * brand, double price)
: _brand(new char[strlen(brand) + 1]()) // 申请空间
, _price(price)
{
strcpy(_brand,brand); // 赋值
}

private:
char * _brand;
double _price;
};