博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C和C++的区别 04.函数重载
阅读量:5984 次
发布时间:2019-06-20

本文共 1085 字,大约阅读时间需要 3 分钟。

hot3.png

函数重载(Overload):用同一函数名定义不同的函数,当函数名和不同参数搭配时函数的意义不同。

也就是说,函数重载就是,名字一样,参数不同。参数不同有三种:个数不同、类型不同、顺序不同。形参的名字和返回值相不相同无所谓。

来看看编译器调用重载函数的准则:(看不懂或者觉得晕可以不看)

  • 将所有同名函数作为候选者
  • 尝试寻找可行的候选函数
  • 精确匹配实参
  • 通过默认参数能够匹配实参
  • 通过默认类型转换匹配实参
  • 匹配失败
  • 最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
  • 无法匹配所有候选者,函数未定义,编译失败。

函数重载的注意事项:

  • 重载函数在本质上是相互独立的不同函数(静态链编)。
  • 重载函数的函数类型是不同的。
  • 函数重载是由函数名和参数列表决定的。
#include "iostream"#include 
using namespace std;void myprintf(int a){ printf("a:%d\n ", a );}void myprintf(double a)//类型不同{ printf("a:%f\n ", a );}void myprintf(char *p, int b)//个数和位置不同{ printf("p:%s, b:%d", p, b);}void myprintf(int b, char *p)//个数不同{ printf("b:%d, p:%s", b, p);}//函数返回类型不是函数重载的判断标准//这里会编译出错int myprintf(int a){ printf("a:%d\n", a);}//当函数重载遇上 函数默认参数int myprintf(int a, int b, int c=0) { printf("a:%d, b:%d c:%d \n", a, b, c); return a;}int main(){ int a = 1; myprintf(a); //调用void myprintf(int a) //myprintf(1,2); //二义性,无法判断是void myprintf(int a, int b)还是int myprintf(int a, int b, int c=0) ,调用失败。 myprintf(1,2,3);//可以区分 return 0;}

转载于:https://my.oschina.net/HappyTeemo/blog/1558437

你可能感兴趣的文章