【问题标题】:How to override virtual function in good style? [C++]如何以良好的风格覆盖虚函数? [C++]
【发布时间】:2011-01-27 10:51:48
【问题描述】:

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

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

在一些出版物中,我看到一些作者为了覆盖它会说:

void f();     

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

【问题讨论】:

  • @James McNellis - 谢谢,出于某种奇怪的原因(原因是在波兰我们称之为覆盖(上帝为什么我们必须尝试在波兰总是更聪明一点))我确信调用这种机制的正确方法。再次感谢。

标签: c++ coding-style virtual-functions overriding


【解决方案1】:

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

【讨论】:

  • 很高兴看到第一个答案是最好的。另请注意,新标准在 doc 中添加了一些装饰器,并检查您为什么要重载、覆盖、隐藏等
【解决方案2】:

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

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

'High Integrity C++ Coding Standard Manual'也推荐这个。

链接在C++ FAQ

【讨论】:

    【解决方案3】:

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

    所以我们有两种情况:

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 2015-06-17
      • 2020-08-21
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2014-05-22
      • 2011-07-28
      • 1970-01-01
      相关资源
      最近更新 更多