龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC++深入详解:函数的覆盖和隐藏(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
当隐藏发生时,如果在派生类的同名函数中想要调用基类的被隐藏函数,可以使用“基类名::函数名(参数)”的语法形式。例如,要在Derived类的fn(int)方

  当隐藏发生时,如果在派生类的同名函数中想要调用基类的被隐藏函数,可以使用“基类名::函数名(参数)”的语法形式。例如,要在Derived类的fn(int)方法中调用Base类的fn()方法,可以使用Base::fn()语句。

  有的读者可能会想,我怎样才能更好地区分覆盖和隐藏呢?实际上只要记住一点:函数的覆盖是发生在派生类与基类之间,两个函数必须完全相同,并且都是虚函数。那么不属于这种情况的,就是隐藏了。

  最后,我们再给出一个例子,留给读者思考,代码如例2-22所示(EX09.CPP)。

  例2-22

  #include <iostream.h>
  class Base
  {
  public:
     virtual void xfn(int i)
     {
       cout<<"Base::xfn(int i)"<<endl;
     }
     void yfn(float f)
     {
       cout<<"Base::yfn(float f)"<<endl;
     }
     void zfn()
     {
       cout<<"Base::zfn()"<<endl;
     }
  };
  class Derived : public Base
  {
  public:
     void xfn(int i) //覆盖了基类的xfn函数
     {
       cout<<"Drived::xfn(int i)"<<endl;
     }
     void yfn(int c) //隐藏了基类的yfn函数
     {
       cout<<"Drived::yfn(int c)"<<endl;
     }
     void zfn()   //隐藏了基类的zfn函数
     {
       cout<<"Drived::zfn()"<<endl;
     }
  };
  void main()
  {
     Derived d;
     Base *pB=&d;
     Derived *pD=&d;
     pB->xfn(5);
     pD->xfn(5);
     pB->yfn(3.14f);
     pD->yfn(3.14f);
     pB->zfn();
     pD->zfn();
  }

精彩图集

赞助商链接