C++ 中函数重载.覆盖与隐藏

C++ 中函数重载、覆盖与隐藏详解

在C++语言中,函数扮演着很重要的角色,不管面向过程设计,还是基于对象设计;不管是面向对象编程,还是基于泛型编程,函数都可以随处而见。在谈论C++中的函数重载、覆盖和隐藏之前,先回顾下函数的基础知识。

函数的声明包括函数的返回值类型,函数名称,参数列表(参数的类型、参数的个数、参数的顺序)。例如,声明一个两个整数之和的函数,int iAdd(int iNum1,int iNum2);而函数的定义可以理解为对函数功能的详尽而准确的解说,通俗点,就是实现函数“how to do?”的效能。两个整数之和函数的定义如下:

  int iAdd(int iNum1,int iNum2)  {     return (iNum1+iNum2);  }

仔细观察函数的声明和定义,我们不难发现,函数的定义就是除掉函数声明后面的分号,换之成大括号,在大括号里面实现函数的功能。虽然在某些情况下,可以容许不对函数进行声明,只需要对函数定义,就能调用函数了。但是,强烈建议养成先声明函数,然后再定义函数,最后在调用函数的良好习惯。关于函数的基础知识,暂时论述到这。

现在,进入本文的主题。函数重载(function overload),它是在同一可访问区域内部声明具有几个不同参数列(参数的类型、参数的个数,参数的顺序)的相同函数名称的一种机制,函数的调用是根据不同的参数类型和最佳匹配原则确定最终使用那个函数。函数覆盖(function override)是在派生类中完全一致性地声明了父类中的函数,区别在于函数定义中的大括号之间的内容可以不同,并且该函数在父类中有关键字virtual标识;函数隐藏(function hide)是指在派生类中函数与父类函数完全一致,但是在父类中该函数没有关键字virtual标识,或者是指在派生类中函数与父类的函数名相同,参数列表不一样,父类中的该函数可有也可无关键字virtual标识。

函数重载的特征:相同的范围内(在同一个类中),函数的名称相同,参数列表不同,virtual关键字可有可无;函数覆盖的特征:在不同的范围内(父类与派生类),函数的名字相同,参数列表相同,父类函数必须有关键字virtual;函数隐藏的特征:在不同范围内(父类与派生类),函数的名字相同,参数列表相同,但是父类函数没有关键字virtual或者,参数列表不相同,父类函数中virtual关键字可有可无。

为了直观地理解,请看下面的代码。

  #include<iostream>  using namespace std;  class A  {  public:     void print(int iNum)     {       cout<<"在类A中,参数类型是整型"<<endl;     }     void print(float fNum)     {       cout<<"在类A中,参数类型是单精度浮点型"<<endl;     }   virtual void print(void)     {       cout<<"在类A中,参数类型是空类型"<<endl;     }  };  class B:public A  {  public:     void print( void)     {       cout<<"在类B中,参数类型是空类型"<<endl;     }        void print(int iNum)     {       cout<<"在类B中,参数类型是整型"<<endl;     }   };  int main()  {     A a;     B b;    //函数的重载     a.print();     a.print(1);     a.print(1.0f);    //函数的覆盖     b.print();   //函数的隐藏     b.print(1);    return 0;  }

运行结果是:

     在类A中,参数类型是空类型     在类A中,参数类型是整型     在类A中,参数类型是单精度浮点型     在类B中,参数类型是空类型     在类B中,参数类型是整型

通过上述代码和运行的结果,简明地知道了函数重载,覆盖和隐藏。恰当里利用这些特性,可以编写出更加有效、清晰和精简的代码。

(0)

相关推荐

  • ASP中函数的重载

    熟悉ASP的人都知道,ASP的默认语言是VBScript,而VBScript是不支持函数重载的.有些人会问,何谓函数重载呢,在这里给出简单的解释:函数重载允许同一个函数名定义多个函数,被重载的函数必须 ...

  • Excel利用SUBTOTAL函数实现单元格隐藏

      Excel利用SUBTOTAL函数实现单元格隐藏 1.首先,我们来看一下本次实例用到的数据,这里有三个城市,要求就是当我将青岛的所有数据隐藏后,汇总的时候统计的是未被隐藏的城市的指标总和,而当我将 ...

  • Matlab如何实现函数重载?

    Matlab如何实现函数重载?下面我就通过一个简单的输出输入数中的最大数的函数fun()来说明Matlab在编辑函数时如何实现重载. 方法/步骤: 1.首先打开Matlab(本人使用的是Matlab ...

  • Matlab如何实现函数重载?Matlab实现函数重载的方法

    大家应该都知道C++和Java编程能够实现函数的重载,而当我们使用Matlab的一些函数,如:plot函数,可以发现该函数可以有不同的输入,如:plot(data).plot(t,data)和plot ...

  • 怎么在电脑中使用文件覆盖来隐藏文件

    有的小伙伴在使用电脑过程中,为了文件的隐私安全,因此想要使用文件覆盖来隐藏文件,也就是将自己的文件隐藏到别的格式的文件中,但是却不知道如何隐藏,那么小编就来为大家介绍一下吧.具体如下:1.第一步,准备 ...

  • CAD中的区域覆盖命令怎么使用?

    CAD中绘图下拉菜单中有许多的命令都有快捷图标,但是也有的命令是没有快捷图标的,"区域覆盖"命令就是其中的一种.说实话,在今天之前笔者从来没有注意到过有这么一个命令,因为实在是用的 ...

  • Linux如何查看so中函数名

    Linux如何查看so中函数名 很多非常熟悉windows 进程依赖那个dll, 使用depends,linux使用ldd命令。 查看函数windows使用dumpbin,linux使用 objdum ...

  • excel中函数lookup查询函数用法详细步骤实例

    excel中lookup查找函数用法详细步骤实例,函数的工作原理是在第二个参数(区域,一般是一列)中查找第一个参数(一般为单元格值),找到首个大于第一个参数时,函数返回找到的上方位置,对应的第三个参数 ...

  • 怎么解决Word2003中的打字覆盖问题

    怎么解决Word2003中的打字覆盖问题 方法一 双击Word窗口最下面的状态栏中的"改写",当其呈灰色时即为插入状态. 方法二 按下Insert键,"改写"就 ...