【C++复习】同名函数判断条件(重载,隐藏,覆盖)

1、重载

以下条件要全部满足:

  1. 函数名相同

以下条件满足其1:

  1. 函数形参数目不同
  2. 函数形参类型不同

注意:

  1. 不看返回值
  2. 调用形式要不同
    • //下面两个函数不能重载
      fun(int a,int b){}
      fun(int a,int b,int c=0){}
      //原因:调用fun(1,2)时,以上两个函数都符合调用条件,系统不知道该调用哪个了
  3. 类内函数可用const区分重载
    • //以下两个函数可在类内重载
      void fun(int a,int b)const{}
      void fun(int a,int b){}
      
      //类外呢?下面的函数在类外定义,会报错
      void fun(int a,int b)const{}
      //non-member function 'void fun(int, int)' cannot have cv-qualifier

2、隐藏

在类的继承中,派生类和基类含有同名函数

判断条件:

  1. 函数名相同
    • 派生类中的同名函数会隐藏基类中的同名函数及其所有的重载形式

注意:

  1. 其他的不管

3、覆盖

在类的继承中,派生类中的虚函数覆盖了基类中的虚函数

以下条件要全部满足:

  1. 函数名称相同
  2. 函数形参类型相同
  3. 函数形参数目相同
  4. const也是区分条件。两函数应均为常函数或均不为常函数。
  5. 函数返回值相同,或函数返回值满足类型兼容性规则

注意:

  1. 一般在派生类函数中也使用virtual,增强程序可读性(当然不写也行)
  2. 使用override表示重写虚函数,以便在编译阶段发现错误。(错误:两函数不满足覆盖条件,即函数参数不一致)
posted @ 2023-02-13 21:22  尚方咸鱼  阅读(107)  评论(0编辑  收藏  举报