August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
当我们在9.4.3节中为Date定义构造函数时,使用了三个整型作为其参数。这会带来一些问题:
第一个问题(非法的日期)比较容易处理,在构造函数中进行检测即可。但是,第二个问题(月和日的混淆),通过用户编写的检测代码是无法查找出来的。这个问题是由于人们书写月和日的习惯不同而造成的:例如,4/5在美国表示4月5日,但在英国表示5月4日。我们不能指望不遇到这个问题,必须采取其他手段解决它。一种明显的解决方案是使用Month类型:
如果使用了Month类型,当我们颠倒了月和日这两个参数时,编译器就会捕获这个问题。而且,使用一个枚举类型作为月的类型,令我们可以使用符号名来表示月份,这样的代码通常比直接使用数字更易读,因而也更不容易出错:
这段代码中,编译器帮我们避免了很多“意外”。注意代码中使用了枚举量mar的限定名Month::mar。我们没有用Month.mar,因为Month不是一个对象(而是一个类型),而mar也不是一个数据成员(而是一个枚举量——一个符号常量)。我们在类名、枚举名或名字空间名(参见8.7节)后使用::,而在对象名后使用.(点)。 ...