【发布时间】:2018-11-16 06:46:50
【问题描述】:
为什么会这样?
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 虚拟方法重写为公共方法?
【问题讨论】:
-
virtual和override根本不关心访问修饰符。值得注意的是,它不是函数签名的一部分,这是virtual和override看的。 -
@AlexG 但他们可以,这就是这个问题的重点。
-
@tower120: UKMonkey 表示
Base& base = a; base.do_run();会产生错误。 -
这是一个很好的问题。 IMO 这是语言设计中的错误,与“子类无法看到私有成员”相矛盾。
-
@sebrockm -- “子类看不到私有成员”是完全错误的。它们无法访问;他们的名字可见。
标签: c++ oop virtual-functions private-members overriding