为什么会出现这种情况?
http://coliru.stacked-crooked.com/a/e1376beff0c157a1 http://coliru.stacked-crooked.com/a/e1376beff0c157a1
class Base{
private:
virtual void do_run() = 0;
public:
void run(){
do_run();
}
};
class A : public Base {
public:
// uplift ??
virtual void do_run() override {}
};
int main()
{
A a;
a.do_run();
}
为什么我可以覆盖PRIVATE虚拟方法作为公共方法?
根据https://en.cppreference.com/w/cpp/language/virtual#In_detail https://en.cppreference.com/w/cpp/language/virtual#In_detail覆盖基地的virtual
成员函数只关心函数名、参数、常量/易失性和引用限定符。它不关心返回类型、访问修饰符或您可能期望它关心的其他内容。
链接的参考文献还特别指出:
Base::vf 不需要可见(可以声明为私有,或使用私有继承来继承)即可被覆盖。
我找不到任何明确允许执行此操作的内容,但覆盖规则并不能阻止它。这是允许的,因为virtual
功能和功能覆盖现有的并且不禁止这种情况。
如果你问why语言就是这样,你可能要问标准化委员会了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)