加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++ 重载函数

发布时间:2020-12-16 09:11:34 所属栏目:百科 来源:网络整理
导读:1、什么是重载函数 同一个函数名定义不同的函数,当函数名相同,不同的参数搭配时含义不同。 例如: #include stdio.h #include string .h int func( int x){ return x;} int func( int x, int y){ return x + y;} int func( const char * s){ return strlen(

1、什么是重载函数

  同一个函数名定义不同的函数,当函数名相同,不同的参数搭配时含义不同。

  例如:

  

#include <stdio.h>
#include <string.h>


int func(int x)
{
    return x;
}

int func(int x,int y)
{
    return x + y;
}

int func(const char *s)
{
    return strlen(s);
}



int main(int argc,char *argv[])
{
    printf("Begin...n");
    printf("%dn",func(1));
    printf("%dn",func(2,3));
    printf("%dn",func("abcdefg"));
    printf("End...n");
    return 0;
}

  运行结果:

Begin...
1
5
7
End...

?

  上面代码函数名相同,在C语言中是肯定会报错的因为C语言不支持重载函数。而在C++中是不会报错的。而且会根据参数 调用 对应的函数。

?

2、允许重载的条件是什么了?

  2.1、参数类型不同

  2.2、参数个数不同

  2.3、参数顺序不同

  三个条件满足其中一条即可满足重载。

  例如:下面代码中的两个 func 就满足第 2.3条 参数顺序不同  

#include <stdio.h>
#include <string.h>

int func(const char *s,int a)
{
    return a;
}

int func(int a,const char *s )
{
    return strlen(s);
}


int main(int argc,func("abc",2));
    printf("%dn","abc"));
        printf("End...n");
        return 0;
}

  运行结果:

Begin...
2
3
End...

?

3、编译器调用重载的准则:

  3.1、将所有同名的函数作为候选

  3.2、尝试寻找可行的候选参数

    3.2.1、精确匹配实参

    3.2.2、通过默认参数能够匹配实参

    3.2.3、通过默认类型转换匹配实参

匹配失败的原因:

  1、最终找出来的候选函数不唯一,出现二义性,编译失败。

  例如:这里调用 printf("%dn" func(1,2)); 的时候 就有两个条件可以匹配所以编译器也不知道应该调用那个函数。

#include <stdio.h>
#include <string.h>

int func(int a,int b)
{
    return a + b;
}

int func(int a,int b,int c=10)
{
    return a+b+c;
}


int main(int argc,char *argv[])
{
    printf("Begin...n");
    printf("%dn" func(1,2));
        printf("End...n");
        return 0;
}

 编译结果:?

test.cpp:18:25: error: call of overloaded ‘func(int,int)’ is ambiguous
  printf("%dn",func(1,2));
                         ^
test.cpp:4:5: note: candidate: int func(int,int)
 int func(int a,int b)
     ^~~~
test.cpp:9:5: note: candidate: int func(int,int,int c=10)
     ^~~~

?

  2、无法匹配所有候选者,函数未定义,编译失败

4、函数重载的注意事项。

  4.1、重载函数在本质上是相互独立的函数

  4.2、重载函数的函数类型不同

  4.3、函数返回值不能作为函数重载的依据

 函数重载是由函数名 和参数列表决定的。    

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读