现代C++软件架构:方法与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7.2 开放封闭原则

开放封闭原则(OCP)意味着,代码对扩展操作开放,对修改操作关闭。对扩展操作开放,意味着我们可以很容易地扩展代码支持的类型。对修改操作关闭,意味着现有的代码不应该改变,因为这通常会导致系统的其他地方出现bug。C++展示开放封闭原则的一个重要特性是ostream操作符<<。为了扩展<<操作符以支持自定义类,所需要做的就是编写类似于下面的代码:

请注意,operator<<的实现是一个自由(非成员)函数。如果可能的话,应该使用成员函数,因为成员函数实际上提高了封装性。有关这方面的更多细节,请参阅“进一步阅读”中Scott Meyers的文章。如果不想让输出到ostream的某些字段被外部公共访问,则可以将operator<<定义为一个friend函数,比如:

请注意,OCP的这个定义与多态的常见定义略有不同。后者指基类不能修改自己,但开放给其他类继承。说到多态,我们来继续介绍下一个原则,它与正确使用多态有关。