如何以良好的风格覆盖虚拟功能? [C ++]

时间:2010-03-14 19:03:54

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

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

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

在一些出版物中,我看到要覆盖这一点,一些作者会说:

void f();     

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

3 个答案:

答案 0 :(得分:14)

这纯粹是一种品味问题。关于某些样式的自我记录价值与其他样式的非冗余性,可以来回做出一些微弱的论据。

答案 1 :(得分:3)

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

最好重复虚拟关键字,因为它会记录哪些派生函数在基类中是虚拟的。

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

链接在C++ FAQ

答案 2 :(得分:0)

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

所以我们有两个案例:

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

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