以下のコード ( ) によって生成される出力には驚きました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()
バインディングが遅いため、コンパイラがここでエラーを発行できないことはわかっていますが、非プライベート コンテキストからプライベート メソッドを呼び出せるのはなぜでしょうか?
根拠は何ですか?