Ada*_*dam 28 c++ overriding metrowerks
是否有人知道C++中的语言特性或技术,以防止子类过度使用父类中的特定方法?
class Base {
public:
    bool someGuaranteedResult() { return true; }
};
class Child : public Base {
public:
    bool someGuaranteedResult() { return false; /* Haha I broke things! */ }
};
尽管它不是虚拟的,但仍然允许这样做(至少在我正在使用的Metrowerks编译器中),所有你得到的是关于隐藏非虚拟继承函数X的编译时警告.
moo*_*eep 34
当您可以使用final虚拟方法的说明符(C++ 11引入)时,您可以这样做.让我引用我最喜欢的doc网站:
当在虚函数声明中使用时,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()’
当您使用Microsoft编译器时,还要查看sealed关键字.
OJ.*_*OJ. 13
一些想法:
除此之外,我不知道一种语言功能会以某种方式锁定你的功能,这种方式可以防止它被重载,并且仍然可以通过指向子类的指针/引用来调用它.
祝好运!
听起来像你正在寻找的是相当于Java语言final关键字,它阻止一个方法被子类覆盖.
正如其他人在这里已经暗示,你真的不能避免这种情况.此外,这似乎是一个经常被问到的问题.
| 归档时间: | 
 | 
| 查看次数: | 15370 次 | 
| 最近记录: |