so true

心怀未来,开创未来!
随笔 - 160, 文章 - 0, 评论 - 40, 引用 - 0
数据加载中……

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

posted on 2008-02-23 19:34 so true 阅读(161) 评论(0)  编辑  收藏 所属分类: C&C++


只有注册用户登录后才能发表评论。


网站导航: