首页 > 解决方案 > 为什么在声明之前是虚拟的,之后是覆盖?

问题描述

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

virtual void Test() { };

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

void Test() override { };

对我来说这没有任何意义,因为我会编辑数千个这样的方法,而现在,编辑太笨拙了,无法花时间。那么在之后放置覆盖的逻辑是什么,因为它可能会更容易,而且对我来说通常更好,如下所示:

override void Test() { };

标签: c++overridingvirtual-functions

解决方案


virtual在 C++ 的开头就作为关键字. 这意味着您不能将其用作变量名、类名、函数名等。

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

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

override :: foo bar()

whereoverride::foo必须是函数的限定返回类型,bar()而不是具有显式全局返回类型的覆盖器::foo(Acknowledge @BenVoigt。)


推荐阅读