如何以良好的风格覆盖虚拟功能?

How to override virtual function in good style? [C++]

伙计们,我知道这个问题非常基本,但我在一些出版物(网站、书籍)中见过不同风格的覆盖虚拟功能。我的意思是:如果我有基础班:

1
2
3
4
5
class Base
{
public:
virtual void f() = 0;
};

在一些出版物中,我看到有些作者会说:

1
void f();

有些人仍然会在void之前重复虚拟关键字。哪种覆盖形式是好的?谢谢你的回答。


这纯粹是一个品味问题。对于某些样式的自文档价值与其他样式的非冗余性,可以反复提出一些薄弱的论点。


不需要将虚拟关键字添加到您在子类中重写的方法中,因为在子类声明中省略该限定符是无法删除的。

但是,当虚关键字记录哪些派生函数在基类中是虚的时,最好重复该关键字。

这也是"高完整性C++编码标准手册"推荐的。

在C++ FAQ中链接。


我个人使用两种样式:virtual意味着方法可以被重写。

所以我们有两种情况:

  • 如果希望类的用户知道该方法可能被重写,请使用virtual关键字
  • 如果您希望隐藏这个事实(因为您提供了新的方法,例如在Template Pattern之后),那么不要使用virtual关键字

我想这是(ab?)的另一种方式。使用关键字。