为什么会这样?
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 虚拟方法重写为公共(public)方法?
最佳答案
根据https://en.cppreference.com/w/cpp/language/virtual#In_detail覆盖基类的 virtual
成员函数只关心函数名、参数、const/volatile-ness 和 ref 限定符。它不关心返回类型、访问修饰符或您可能期望它关心的其他事情。
链接的引用还特别指出:
Base::vf does not need to be visible (can be declared private, or inherited using private inheritance) to be overridden.
我能找到的任何东西都没有明确允许这样做,但覆盖规则并没有阻止它。由于 virtual
函数和覆盖现有函数而不是不允许这种情况,它是允许的。
如果您要问为什么语言是这样的,您可能需要询问标准化委员会。
关于C++将私有(private)纯虚拟方法覆盖为公共(public),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722824/