August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
未初始化的变量可能会成为错误之源。为了解决这个问题,我们可以用构造函数来保证类的每个对象都被初始化。例如,我们定义了构造函数Date::Date(int,Month,int)来保证每个Date对象都会被正确地初始化。这意味着程序员必须提供三个类型正确的参数。例如:
注意,虽然我们为Date定义了一个需要三个参数的构造函数,但是通过赋值运算直接拷贝还是没有问题的。
很多类都能很好地理解默认值,也就是说,它们能解决这个问题:“如果我没有为对象提供一个初始值,那么它应该具有什么值?”例如:
这些代码就像注释所描述的那样工作,这看起来很合理。之所以vector和string类能支持这样的特性,是因为它们都有默认构造函数(default constructor),可以隐含地进行所需的初始化工作。
对于类型T,符号T{}表示默认值,这是通过定义默认构造函数实现的,因此,我们可以写出下面这样的代码:
但是,我们更倾向于采用下面这种等价的,但更“口语化”的语法形式:
对于内置类型,如int和double来说,默认构造函数的结果为0,即,int{}是0的一种复杂描述,而double{}是0.0的一种啰嗦的说法。 ...