别怕Linux编程

Google C++编程规范 – 第三十五条 -《继承》

本原创文章属于《Linux大棚》博客。

博客地址为http://roclinux.cn

文章作者为roc wu

==

【规范】

在大部分情况下,使用联合比使用继承更合理。如果必须要使用继承时,请使用public继承。

【定义】

当子类以public继承父类时,子类将拥有父类所有的数据和方法的定义。在C++中,继承有两种主要的用法:

  1. 实现继承(implementation inheritance):子类继承了父类的实现代码
  2. 接口继承(interface inheritance):子类仅继承父类的方法名

【支持者的声音】

“实现继承”达到了复用的效果,有效地控制了代码量,而且继承属于编译时声明,所以可以让人们更好的理解代码和发现错误。

而“接口继承”能够确保类对外暴露指定的API,而且也可以在编译阶段发现错误,比如类没有定义某个特定的方法等。

【反对者的声音】

对于“实现继承”来说,由于子类的代码分散在子类和父类中,所以想理解子类的实现和逻辑,会比较困难。

子类不能重载非虚函数,所以子类也不能修改其实现。

【结论】

所有的继承都应该是public方式。假如你要选择以private方式继承,还不如将父类的实例作为一个成员包含进来。

切忌不要滥用“实现继承”。联合在大多数情况下会更合适。尽量确保只在“A is a B”的关系中才使用继承。

如果有必要的话,将析构函数定义为虚函数。如果类中有虚函数,则其析构函数也应该定义为虚函数。(注意,数据成员都应该是私有的)

当重载一个继承来的虚函数时,要在子类中显式的标注它为virtual。因为如果不写的话,用户只有查看父类,才能知道此函数是虚函数。

谢谢!

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *