这是一个设计问题,让我们有一个简单的方法:
virtual void Test() { };
我们可以用同样的方式覆盖它,甚至可能根本不指定virtual
,但有一个override
关键字,它使编译器检查它是否真的覆盖了一些东西,这很有用,但它需要这样写:
void Test() override { };
对我来说,这毫无意义,因为我已经编辑了成千上万种这样的方法,而现在,编辑太笨拙了,无法花时间。那么,将覆盖放在后面的逻辑是什么呢?因为它可能更容易,对我来说通常更像这样:
override void Test() { };
virtual
是在C++开始时作为关键字引入的。这意味着您不能将其用作变量名、类名、函数名等等
override
的出现要晚得多。为了在C++11中引入它不会破坏现有的代码,它没有完全达到关键字的状态;相反,它被称为具有特殊含义的标识符。CCD_ 5类似。
它奇怪的定位是由语言语法指定的:就是一个例子,允许它在一开始就是一个突破性的变化
override :: foo bar()
其中override::foo
必须是函数bar()
的限定返回类型,而不是具有显式全局返回类型::foo
(Acknowledge@BenVoigt.(的重写器