从第10行可以看出,在用默认构造函数实例化anAccumulator时,myValue会被初始化为0。
第14行~第16行是复制构造函数的函数头和初始化myValue。myValue被初始化为与参数theAccumulator的myValue相同。
当执行完构造函数后,对象就会被创建,对象的成员函数myValue也会进入安全和可用的状态。如果成员变量没有被初始化,变量的值就可能是随机的。这也是构造函数为什么重要的原因。
这也是我们在良好设计的类中看不到公有成员变量的原因。对象无法控制其公有成员变量被更改,也无法保证赋值是否正确。但在成员函数的代码中,我们可以检查和验证输入值。所以使用getter和setter函数更能保证对象在生命期内保持一致的内部状态。
第24行~第38行在调用anAccumulator实例的Apply()时改变成员变量myValue的状态。代码使用简短的算术赋值运算符(+=、-=、*=和/=)改变myValue的状态。
第40行~第49行通过抛出runtime_error异常处理接收意料之外的运算符的情况。可以看到,异常报告了发现错误所在的命名空间、类、函数以及错误消息。这在调试时很有用。
还可以看到,异常抛出代码块使用C++(www.cppentry.com)标准库的string类(用#include <string>引用,在std命名空间中)产生消息。std::string类允许用+连接多个字符串,非常像cout中使用多个<<操作符在一行显示多个变量。string()是string类的构造函数,可以把C++(www.cppentry.com)字符串字面量(实际为char*)转换为std::string。
【责任编辑:董书 TEL:(010)68476606】