您的位置:首页 > 编程语言 > C语言/C++

C++继承中的重载、覆盖和隐藏

2007-06-07 04:31 375 查看
重载(overload),覆盖(override),隐藏(hide)。

我们先来看一些代码及其编译结果。

  实例一:    

    #include "stdafx.h"
    #include
  class CB
    {
    public:
       void f(int)

       {
          cout << "CB::f(int)" << endl;
       }
  };  

  class CD : public CB
    {
    public:
       void f(int,int)
       {
         cout << "CD::f(int,int)" << endl;
       }
       void test()
       {
        f(1);
       }
    }; 

   int main(int argc, char* argv[])
   {
      return 0;
   }
  编译了一下
  error C2660: 'f' : function does not take 1 parameters

  结论:在类CD这个域中,没有f(int)这样的函数,基类中的void f(int)被隐藏

  如果把派生CD中成员函数void f(int,int)的声明改成和基类中一样,即f(int),基类中的void f(int)还是一样被覆盖,此时编译不会出错,在函数中test调用的是CD中的f(int) 

  所以,在基类中的某些函数,如果没有virtral关键字,函数名是f(参数是什么我们不管),那么如果在派生类CD中也声明了某个f成员函数,那么在类CD域中,基类中所有的那些f都被隐藏。

  如果你比较心急,想知道什么是隐藏,看文章最后的简单说明,不过我建议你还是一步一步看下去。

  我们刚才说的是没有virtual的情况,如果有virtual的情况呢??

  实例二:  

  #include "stdafx.h"
  #include  
  class CB
  {
  public:
     virtual void f(int)
     {
       cout << "CB::f(int)" << endl;
     }  

  };  

  class CD : public CB
  {
  public:
     void f(int)
     {
       cout << "CD::f(int)" << endl;
     }  

  };  
  int main(int argc, char* argv[])
  {
    return 0;
  }
  这么写当然是没问题了,在这里我不多费口舌了,这是很简单的,多态,虚函数,然后什么指向基类的指针指向派生类对象阿,通过引用调用虚函数阿什么的,属性多的很咯,什么??你不明白??随便找本C++的书,对会讲多态和虚函数机制的哦!!

在了解了虚函数的概念后,我建议大家去了解一些纯虚函数和虚函数的差别,相信大家会更明白其机制.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: