首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为默认的specifier...why覆盖,不是吗?

作为默认的specifier...why覆盖,不是吗?
EN

Stack Overflow用户
提问于 2015-11-11 12:50:10
回答 2查看 149关注 0票数 3

自从使用c++11以来,我一直注意到,在从接口派生的类中,我总是使用覆盖说明符(对我来说,人们主要想知道基中的虚拟签名何时发生变化)。我几乎觉得连续指定重写是错误的,这就引出了我的问题:

为什么标准委员会不决定覆盖默认值(为虚拟人生成基本签名更改上的编译器错误),同时添加一个关键字来显式地“不关心”,例如override_ignore (我不认为有人会忽略这一点)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-11 13:07:34

正如Nathan所提到的:向后兼容性(一个必要的缺点)。尽管在代码库中对“重写”一词进行大量替换是相当容易的,但它只是对一个本已不情愿的编程社区的另一个障碍。

另一个要点是代码的可读性。如果您正在维护一个非常大的代码基中的一小部分,最好在您的子类中有一个覆盖说明符来提醒您:

  • 如果不重构父类和所有同级类,则不应该重构该方法,
  • 该方法是为了满足特定的要求,以及
  • 有关该方法所需工作的任何信息,都可以在父类的头中找到。

C++没有专注于使代码本身尽可能的小和高效-这就是为什么它很少赢得任何代码-高尔夫挑战。相反,它是一种语言,它专注于严谨,在你所做的每件事上都是明确的。至少,这是我对语言的看法,以及为什么(虽然一些常见的操作比其他许多语言需要更多的时间)在复杂的程序中需要清晰的时候,它是我的首选语言。

票数 2
EN

Stack Overflow用户

发布于 2015-11-11 13:26:38

还考虑以下情况:

代码语言:javascript
复制
struct A {
    virtual void foo();
}

struct B: public A {
    vitual void fog() override; 
}

您输入了函数名,这段代码将给您带来编译错误。但是,使用默认覆盖方法,编译器将永远不会知道存在错误.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33650909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档