C++编程规范之38:实施安全的覆盖
摘要:
负责任地进行覆盖:覆盖一个虚拟函数时,应该保持可替换性;说得更具体一点,就是要保持基类中函数的前后置条件。不要改变虚拟函数的默认参数。应该显式地将覆盖函数重新声明为virtual.
虽然派生类通常会增加更多状态,但他们所建模的是其基类的子集而非超集。在正确的继承关系中,派生类所建模的是更一般的基础概念的一个特例。
定义一个可能的失败的派生覆盖函数,只是在基类没有声明换做总是成功的时候,这个定义才是正确的。在覆盖的时候,永远不要修改默认参数。它们不是函数签名的一部分,客户代码将因为不知情而将不同参数传递给函数,具体要传递给哪一个参数,将取决于它们具有层次结构中那个节点的访问权限。
对于调用者而言,同一个对象的成员函数会不加提示地根据自己访问所使用的静态类型而接受不同参数,这可能是一件非常令人奇怪的事情。在覆盖函数时,应该添加冗余的virtual.这能够更清楚地想阅读代码的人表达自己的意图。谨防不小心在基类中隐藏了重载函数。关于重载、覆盖、隐藏的概念区分详见:https://blog.csdn.net/longshengguoji/article/details/17691913
最后更新:2017-04-03 12:54:00
上一篇:
对 GNU Radio 进行 Octave 分析
下一篇:
linux驱动开发--字符设备:简单的file_operations示例
如何用React-Router进行页面权限管理
PostgreSQL 10.0 preview 功能增强 - 国际化功能增强,支持ICU(International Components for Unicode)
为了推广太极文化,马云要演电影了
偷了世界的程序员
在VS2008环境下配置DirectX目录
nagios客户端未启动报错
怡海软件:不上ERP等死,上了ERP找死?!
《Apache Zookeeper 官方文档》管理分布式系统就像管理动物园一样
Redis4.0新特性(一)-Memory Command
剖析Disruptor:为什么会这么快?(一)Ringbuffer的特别之处