【问题标题】:Enforcing Correct Virtual Function Definitions in Derived Classes [duplicate]在派生类中强制执行正确的虚拟函数定义
【发布时间】:2011-04-21 09:32:00
【问题描述】:

可能重复:
Making sure the method declaration is inherited

您好,我有时难以在我的类层次结构中强制执行适当的虚成员函数定义。如果我错误地定义了一个从接口继承的虚函数,这个 bug 很快就会暴露出来,因为我通常无法实例化派生类。但是,如果从说继承自接口的基类(非抽象)继承,则错误变得更加微妙:即。在错误定义中(例如 VIsVisible() 与 VisVisible() 或参数类型(包括 const)的微小变化),然后当我认为自己在层次结构内部时,我最终会定义和调用层次结构之外的函数。理想情况下,当我在派生类中定义函数时,如果它与基类中的现有虚函数不一致,我希望编译器通过引入某种关键字来标记它......其他人如何管理这个问题? 感谢您的帮助/想法!

【问题讨论】:

    标签: c++ visual-c++ virtual-functions


    【解决方案1】:

    您想使用 override 关键字:

    class Base
    {
        virtual void MyFunction() { /*Blah*/ }
    };
    
    class Child : Base
    {
        virtual void MyFunction() override { /* DoSomething*/ }
    };
    

    如果您更改Base::MyFunction 的定义,您现在将收到编译错误。

    override documentation

    【讨论】:

    • override 是标准 C++ 功能吗?
    • 它将在新的 C++0x 功能集中,但我相信它目前仅在 MS 的编译器中实现。 OP 没有指定他使用的是什么编译器。
    • 这是所有 MS 扩展的东西 AFAIK。
    • 完美! - 谢谢你。我正在使用 VC++,所以它对我很有用。另外,道歉 - 这实际上与 ildjarn 指出的前一个问题相同(我在数据库搜索中使用了错误的标签)。
    • @sharptooth:它将在 C++0x 中,经过多次争论,拥有 [[overrides]] 属性的提议被微软拒绝(基本上他们明确表示他们将永远实现它,因为他们有 override 注释),因此委员会决定让步并接受 overridefinal 作为虚拟说明符放置在正确的位置在可选的纯说明符之前(即=0)。
    猜你喜欢
    • 2015-10-23
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2020-09-30
    • 2021-06-14
    • 2014-01-15
    相关资源
    最近更新 更多