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的函数也不会与父类产生任何关系。