#include<iostream>
using namespace std;
class base
{
public:
virtual void add() {
cout << "hi";
}
};
class derived : public base
{
private:
void add() {
cout << "bye";
}
};
int main()
{
base *ptr;
ptr = new derived;
ptr->add();
return 0;
}
輸出爲bye
爲什麼我可以通過派生對象的基類指針訪問派生的私有成員函數?
我沒有用,這是如何實現的問題。我知道你使用vtables,並且派生的vtable包含新的add()函數的地址。但是,當我試圖在類之外訪問它時,add()是否是私有的,不應該編譯器生成錯誤?不知怎的,這看起來不正確。
覆蓋和訪問說明符是正交概念。 – sbi 2010-08-31 19:28:33
vtables是一個實現細節。 – 2011-05-11 09:24:37