C++语言的Bug

C++语言的Bug

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

你可能感兴趣的:(C++语言的Bug)