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



这是一个设计问题,让我们有一个简单的方法:

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.(的重写器

最新更新