设为首页 加入收藏

TOP

2.2.8 函数的覆盖和隐藏(2)
2013-10-07 15:21:40 来源: 作者: 【 】 浏览:69
Tags:2.2.8 函数 覆盖 隐藏

2.2.8  函数的覆盖和隐藏(2)

在这个例子中,Derived类的fn(int)函数隐藏了Base类的fn()函数,Derived类fn(int)函数不是虚函数(注意和覆盖相区别)。Derived2类的fn()函数隐藏了Derived类的fn(int)函数,由于Derived2类的fn()函数与Base类的fn()函数具有同样的函数名和参数列表,因此Derived2类的fn()函数是一个虚函数,覆盖了Base类的fn()函数。注意,在Derived2类中,Base类的fn()函数是不可见的,但这并不影响fn函数的覆盖。

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

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

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

例2-22

  1. #include <iostream.h> 
  2. class Base  
  3. {  
  4. public:  
  5.         virtual void xfn(int i)  
  6.         {  
  7.             cout<<"Base::xfn(int i)"<<endl;  
  8.         }  
  9.  
  10.         void yfn(float f)  
  11.         {  
  12.             cout<<"Base::yfn(float f)"<<endl;  
  13.         }  
  14.  
  15.         void zfn()  
  16.         {  
  17.             cout<<"Base::zfn()"<<endl;  
  18.         }  
  19. };  
  20.  
  21. class Derived : public Base  
  22. {  
  23. public:  
  24.         void xfn(int i) //覆盖了基类的xfn函数  
  25.         {  
  26.             cout<<"Drived::xfn(int i)"<<endl;  
  27.         }  
  28.  
  29.         void yfn(int c) //隐藏了基类的yfn函数  
  30.         {  
  31.             cout<<"Drived::yfn(int c)"<<endl;  
  32.         }  
  33.  
  34.         void zfn()      //隐藏了基类的zfn函数  
  35.         {  
  36.             cout<<"Drived::zfn()"<<endl;  
  37.         }  
  38. };  
  39.  
  40.  
  41. void main()  
  42. {  
  43.         Derived d;  
  44.  
  45.         Base *pB=&d;  
  46.         Derived *pD=&d;  
  47.       
  48.         pB->xfn(5);  
  49.         pD->xfn(5);  
  50.       
  51.         pB->yfn(3.14f);  
  52.         pD->yfn(3.14f);  
  53.  
  54.         pB->zfn();  
  55.         pD->zfn();  
  56. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.11 VC++程序编译链接的原理与.. 下一篇2.2.10 C++类的设计习惯及头文件..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: