Possible Duplicate:
C++: overriding public\private inheritance私人虛函數在派生類中
class base {
public:
virtual void doSomething() = 0;
};
class derived : public base {
private: // <-- Note this is private
virtual void doSomething()
{ cout << "Derived fn" << endl; }
};
現在,如果我做了以下內容:
base *b = new child;
b->doSomething(); // Calls the derived class function even though that is private
問:
- 它能夠調用派生類的函數,即使它是私人的。這怎麼可能?
現在,如果我改變繼承訪問說明符從公衆保護/私有,我得到一個編譯錯誤:
'type cast' : conversion from 'Derived *' to 'base *' exists, but is inaccessible
注:我知道的繼承訪問說明的概念。所以在第二種情況下,它是由private/protected派生的,因此無法訪問。但我想知道第一個問題的答案。任何意見將不勝感激。
我想他想知道訪問說明符爲什麼這樣工作,而不知道錯誤的來源是什麼。 – Hossein