有没有人知道C++中有一种语言特性或技术可以防止子类覆盖父类中的特定方法?
class Base {
public:
bool someGuaranteedResult() { return true; }
};
class Child : public Base {
public:
bool someGuaranteedResult() { return false; /* Haha I broke things! */ }
};即使它不是虚拟的,这仍然是允许的(至少在我正在使用的Metrowerks编译器中),你得到的只是一个关于隐藏非虚拟继承函数X的编译时警告。
发布于 2008-08-20 06:53:41
以下是几个想法:
除此之外,我不知道有哪种语言功能会以这样的方式锁定你的函数,防止它被重载,并且仍然可以通过指向子类的指针/引用来调用。
祝好运!
发布于 2013-06-04 05:26:36
当您可以对虚方法(在C++11中引入)使用final说明符时,就可以做到这一点。让我引用my favorite doc site的话
当在虚函数声明中使用时,final指定函数不能被派生类重写。
适应您的示例,如下所示:
class Base {
public:
virtual bool someGuaranteedResult() final { return true; }
};
class Child : public Base {
public:
bool someGuaranteedResult() { return false; /* Haha I broke things! */ }
};编译时:
$ g++ test.cc -std=c++11
test.cc:8:10: error: virtual function ‘virtual bool Child::someGuaranteedResult()’
test.cc:3:18: error: overriding final function ‘virtual bool Base::someGuaranteedResult()’当你使用微软编译器时,还要看看sealed关键字。
https://stackoverflow.com/questions/17483
复制相似问题