在派生类中使用"虚拟"

Per*_*son 19 c++ virtual

我最近在派生类中看到了代码放在virtual函数前面的代码.这是常见的吗?我觉得这很奇怪,有点让我措手不及.

编辑:我不是在问虚拟是什么,我问为什么有人会将虚拟放在已经覆盖其基类中的虚函数的派生类中.

EX:

class B {
 public:
  virtual void foo();
  ....
};

class D : public B {
 public:
  virtual void foo(); // could have just put void foo();
  ...
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*ran 26

virtual在最高(最少派生)级别的可重写函数需要.它是可选的,但在较低(更多派生)的水平上是无害的.它可以自我记录代码.

  • 究竟.编译器已经知道了,但读取代码的其他人可能需要通过多个头文件进行追踪才能找到答案. (3认同)

Ral*_*lph 9

这很常见.许多风格指南推荐它,例如谷歌.目的是增强代码的可读性.


AnT*_*AnT 5

我看不出有什么奇怪的。在许多情况下(如果不是大多数时候)程序员通过从基类复制粘贴来在派生类中创建覆盖函数的声明。花费额外的精力来手动删除冗余virtual说明符是没有意义的。此外,显式virtual可以更容易地查看哪些函数是虚拟的。


Lyn*_*ynn 5

这些答案(和这种做法)已经过时了.从C++ 11开始,您应该使用override关键字明确指定虚函数覆盖另一个虚函数.如果您尝试override在基类中不是虚函数的东西,您的编译器将抛出错误!