g++ 4.4.7
我对下面这段代码( )产生的输出感到惊讶。
class A {
public:
virtual void f() {std::cout << "A::f()" << std::endl;}
};
class B : public A {
private:
// Automatically virtual, because of base class
void f() {std::cout << "B::f()" << std::endl;}
};
int main(int argc, const char *argv[])
{
A *pB = new B();
pB->f();
return 0;
}
输出是
B::f()
我知道由于后期绑定,编译器不能在这里发出错误,但是为什么我们可以从非私有上下文中调用私有方法呢?
理由是什么?