C++编程规范之38:实施安全的覆盖

来源:互联网 发布:php 在线拍卖系统源码 编辑:程序博客网 时间:2024/05/01 16:22

摘要:

    负责任地进行覆盖:覆盖一个虚拟函数时,应该保持可替换性;说得更具体一点,就是要保持基类中函数的前后置条件。不要改变虚拟函数的默认参数。应该显式地将覆盖函数重新声明为virtual.

    虽然派生类通常会增加更多状态,但他们所建模的是其基类的子集而非超集。在正确的继承关系中,派生类所建模的是更一般的基础概念的一个特例。

    定义一个可能的失败的派生覆盖函数,只是在基类没有声明换做总是成功的时候,这个定义才是正确的。在覆盖的时候,永远不要修改默认参数。它们不是函数签名的一部分,客户代码将因为不知情而将不同参数传递给函数,具体要传递给哪一个参数,将取决于它们具有层次结构中那个节点的访问权限。

对于调用者而言,同一个对象的成员函数会不加提示地根据自己访问所使用的静态类型而接受不同参数,这可能是一件非常令人奇怪的事情。在覆盖函数时,应该添加冗余的virtual.这能够更清楚地想阅读代码的人表达自己的意图。谨防不小心在基类中隐藏了重载函数。关于重载、覆盖、隐藏的概念区分详见:http://blog.csdn.net/longshengguoji/article/details/17691913

1 0