如何强制基类方法不被派生类覆盖?
最佳答案
如果您能够使用 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/