class A
{
public:
virtual void func()
{
AfxMessageBox("A::func()");
}
};
class B : public A
{
private:
void func()
{
AfxMessageBox("B::func()");
}
};
A* pa=new B();
pa->func();
結果是調用了B的func函數,突破了private的限制。
說的明白一點,就是在Java中,要求子類在覆蓋父類的函數時,不能降低可見性,只能擴大或至少相等。而對于C++卻沒有這樣的限制,正如上面的例子掩飾的那樣。
此外,在Java中,如果父類中把函數聲明為private的,那么對于子類而言,該函數根本就不可見,根本就產生不了override,即便在子類中定義一個函數名、參數類型、返回值、修飾符也為private的函數也不會與父類產生任何關系。