有没有办法在没有重新实现的情况下从子类标记父级的虚函数final

时间:2017-05-02 07:43:42

标签: c++ c++11

如果我有代码:

struct Parent
{
    virtual void fn();
};

struct Child : public Parent
{
    virtual void fn() override final
    {
        Parent::fn();
    }
};

只有通过Parent::fn访问final Child而无需重新实施fn,才能让class成为fn,以便其他一些Parent可以覆盖从Child派生而来的struct Child : public Parent { virtual void fn() override final = Parent::fn; }; {{1}}来源{{1}}

像:

{{1}}

或其他一些语法?

1 个答案:

答案 0 :(得分:10)

不,你不能重新实现它就可以做到。所以重新实现它:

struct Child : public Parent
{
    virtual void fn() override final { Parent::fn(); }
};

N.B。说virtual ... override final完全是多余的,final是非虚函数的错误,所以你应该说:

    void fn() final { Parent::fn(); }

请参阅http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override