c++ - 为什么在声明之前是虚拟的,之后是覆盖?
问题描述
这是一道设计题,我们来个简单的方法:
virtual void Test() { };
我们可以用同样的方式覆盖它,甚至virtual
可能根本不指定,但是有 thisoverride
关键字,它使编译器检查它实际上覆盖了某些东西,这很有用,但它需要这样写:
void Test() override { };
对我来说这没有任何意义,因为我会编辑数千个这样的方法,而现在,编辑太笨拙了,无法花时间。那么在之后放置覆盖的逻辑是什么,因为它可能会更容易,而且对我来说通常更好,如下所示:
override void Test() { };
解决方案
virtual
在 C++ 的开头就作为关键字. 这意味着您不能将其用作变量名、类名、函数名等。
override
很晚才出现。为了使其在 C++11 中的引入不会破坏现有代码,它并没有完全达到关键字的地位;而是称为具有特殊含义的标识符。final
类似。
它的奇怪定位由语言语法指定:允许它位于开头将是一个重大变化的示例是
override :: foo bar()
whereoverride::foo
必须是函数的限定返回类型,bar()
而不是具有显式全局返回类型的覆盖器::foo
(Acknowledge @BenVoigt。)
推荐阅读
- javascript - 我的 JQuery 循环运行。未捕获的 RangeError:超出最大调用堆栈大小
- c++ - 编译 C++ 程序时出错:错误:在 '>' 标记之前预期的 unqualified-id
- rust - 为什么当我用一个新值替换它时,Rust 编译器会抱怨我使用了一个移动的值?
- javascript - 当我尝试导入某些 JS 文件时出现“找不到模块”错误
- regex - 正则表达式后视中的可选空格
- r - 在 Rshiny 中绘制某些值
- soap - 如何让wsdl符合soap输入
- python - 没有名为“分类”的模块
- amazon-web-services - 为什么 boto3.client("ecs").describe_tasks(...) 并不总是有 stopCode?
- spartacus-storefront - 错误类型错误:无法读取未定义的属性“__source”