我對以下代碼產生的輸出感到驚訝(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()
我知道,因爲後期綁定編譯器不能在這裏發出一個錯誤,但我們爲什麼可以調用私有方法從非私有上下文?
原理是什麼?
正確的答案是我正在尋找!無法在標準中找到它。謝謝。 –