为什么声明前是虚拟的,声明后是重写的?

Why is virtual before declaration and override after?

这是一道设计题,来个简单的方法:

virtual void Test() { };

我们可以用同样的方式覆盖它,甚至可能根本不指定 virtual,但是还有这个 override 关键字,它使编译器检查它实际上是否覆盖了某些东西,这是有用,但需要这样写:

void Test() override { };

对我来说这毫无意义,因为我实际上编辑了数千个这样的方法,而像现在这样,编辑太笨拙了,无法花时间。那么在后面放置覆盖的逻辑是什么,因为它可能更容易,对我来说通常更好:

override void Test() { };

virtual 是在 C++ 的开头作为 关键字 引入的。这意味着您不能将它用作变量名称、class 名称、函数名称等。

override来得晚得多。为了使其在 C++11 中的引入不会破坏现有代码,它并没有完全达到关键字的地位;相反,它被称为具有特殊含义的 标识符 final 相似。

它的奇怪定位是由语言语法指定的:允许它位于开头将是一个重大更改的示例是

override :: foo bar()

其中 override::foo 必须是限定的 return 类型的函数 bar() 而不是具有显式全局 return 类型 ::foo 的覆盖程序(确认@BenVoigt。)