August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
编程中总是要创建对象的,也就是说,我们总是要考虑初始化和构造函数。构造函数可能是最重要的类成员:为了编写构造函数,我们必须确定初始化一个对象时应该做什么,以及什么样的值是合法值(不变式是什么)。单纯地考虑初始化工作,会帮助你在设计构造函数时避免错误。
下一个经常要考虑的问题是:我们需要拷贝对象吗?如果可以,如何拷贝呢?
对于Date或Month,答案是:我们显然需要拷贝这两种类型的对象;而这两种类型的对象的拷贝的含义很简单——只要复制所有成员即可。实际上,这正是默认情形。只要你不特别声明,编译器就会正确地做到上述效果。例如,如果你将一个Month对象作为初始化值和赋值运算的右部,编译器就会完成其所有成员的拷贝:
这段代码已经完全按我们的期望工作了。用Date{1978,Month::dec,24}可以创建一个正确的未命名Date对象,你可以用它来做一些适当的工作。例如:
这里对构造函数的使用很像类作为类型的字面值常量。通常,当我们需要定义一个只使用一次的变量或常量时,这是一种很方便的方法。
如果我们需要拷贝操作的含义与默认情况不同,应该怎么做呢?可以定义自己的拷贝函数(参见13.3节),或者将拷贝构造函数和拷贝赋值运算符描述为delete(参见19.2.4节)。