8

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

class Base
{
public:
virtual void f() = 0;
};

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

void f();     

有些人仍然会在 void 之前重复 virtual 关键字。哪种覆盖形式的风格很好?谢谢您的回答。

4

3 回答 3

14

这纯粹是口味问题。关于某些样式的自我文档价值与其他样式的非冗余性,可以来回提出一些弱论点。

于 2010-03-14T19:05:03.950 回答
3

没有必要将 virtual 关键字添加到您在子类中覆盖的方法,因为无法通过在子类声明中省略它来删除此限定符。

然而,重复使用 virtual 关键字是一种很好的做法,因为它记录了哪些派生函数在基类中是虚拟的。

'High Integrity C++ Coding Standard Manual'也建议这样做。

链接在C++ FAQ中。

于 2010-03-15T01:53:16.747 回答
0

我个人使用这两种样式:virtual意味着该方法可以被覆盖。

所以我们有两种情况:

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

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

于 2010-03-15T09:13:22.003 回答