c++ - 如何防止派生类中的方法被覆盖?

标签 c++ inheritance overriding

如何强制基类方法不被派生类覆盖?

最佳答案

如果您能够使用 final来自 C++11 的说明符,您可以防止派生类覆盖该方法。 (Microsoft 编译器似乎支持具有相似语义的相似 sealed。)

这是一个例子:

#include <iostream>

struct base {
    // To derived class' developers: Thou shalt not override this method
    virtual void work() final {
        pre_work();
        do_work();
        post_work();
    }
    virtual void pre_work() {};
    virtual void do_work() = 0;
    virtual void post_work() {};
};

struct derived : public base {
    // this should trigger an error:
    void work() {
        std::cout << "doing derived work\n";
    }
    void do_work() {
        std::cout << "doing something really very important\n";
    }
};

int main() {
    derived d;
    d.work();
    base& b = d;
    b.work();
}

这是我尝试编译时得到的结果:

$ g++ test.cc -std=c++11
test.cc:17:14: error: virtual function ‘virtual void derived::work()’
test.cc:5:22: error: overriding final function ‘virtual void base::work()’

关于c++ - 如何防止派生类中的方法被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465686/

相关文章:

c - 有没有办法让 GCC/Clang 知道 C 中的继承?

c# - 面向对象编程基本概念(C#)

c# - 覆盖回车键,但保留 wpf 数据网格中其他键的默认行为

c++ - std::lock_guard 导致未定义的行为

java - 将程序输出重定向为输入 - 管道不起作用

c++ - 从 C++ 中的错误模板实例化继承

perl - 在 Perl 中检测被覆盖的方法

javascript - 是否可以在 JavaScript 中调用另一个函数中本地定义的函数?

c++ - 正确的 C++ 方法来存储多类型数据

c++ - Qt - QTreeWidgetItem 未被编辑