1 构造函数
构造函数的任务是初始化类对象的数据成员, 无论何时只要类的对象被创建, 就会执行构造函数
构造函数名与类名相同
没有返回类型
可以重载
不能声明成 const
(1)合成的默认构造函数
如果我们没有为类显式的定义构造函数, 编译器会为我们隐式的定义一个默认构造函数 (没有任何参数) 又叫做合成的默认构造函数)这个构造函数按照下面规则初始化类的数据成员:
如果有类内初始值, 用它来初始化成员 (比如上面的 units_sold=0,revenue=0.0) 类内初始值必须以 = 或 {} 表示
否则, 默认初始化(如 bookNo 被初始化为空字符串)
(2)自定义默认构造函数
一般情况下, 类都需要定义一个默认构造函数, 主要有以下三个原因:
一旦定义了其他构造函数, 除非我们自己再定义一个默认构造函数, 否则这个类将没有默认构造函数
若类中含有内置类型或复合类型 (比如数组和指针) 的数据, 如果没有提供类内初始值(有的编译器可能不支持类内初始值), 使用合成的默认构造函数的值将是未定义的
如果类中包含其他类的对象, 而这个对象没有默认构造函数, 那么编译器不能为类合成默认构造函数, 我们必须自己定义一个默认构造函数
Sales_data()=default;
函数名与类名相同, 没有参数列表, 参数列表后面加上 = default 要求编译器生成默认构造函数
(3)构造函数初始值列表
Sales_data(const string & s,unsigned n,double p):bookNo(s),units_sold(n),revenue(p*n){}
冒号和花括号中间的部分就是构造函数的初始值列表如果某个数据成员没有被初始值列表包括, 这个值将以与合成默认构造函数相同的方式隐式初始化, 对于没有初始值列表的构造函数, 也是以同样的方式初始化
2 构造函数初始值列表
(1)必须使用构造函数初始值列表的类型
来源: http://www.bubuko.com/infodetail-2500682.html