学习狄泰软件学院唐老师C++课程心得,文章内容来自于唐老师课件
一、C++中的函数重载
函数重载
- 用同一个函数名定义不同的函数
- 当函数名和不同的参数搭配时函数的含义不同
#include <stdio.h>
#include <string.h>
int func(int x)
{
return x;
}
int func(int a, int b)
{
return a + b;
}
int func(const char* s)
{
return strlen(s);
}
int main(int argc, char *argv[])
{
printf("%d\n", func(3));
printf("%d\n", func(4, 5));
printf("%d\n", func("D.T.Software"));
return 0;
}
3
9
12
函数重载至少满足下面的一个条件:
#include <stdio.h>
int func(int a, int b, int c = 0)
{
return a * b * c;
}
int func(int a, int b)
{
return a + b;
}
int main(int argc, char *argv[])
{
int c = func(1, 2);
//Error] call of overloaded 'func(int, int)' is ambiguous
return 0;
}
编译器调用重载函数的准则:
- 将所有同名函数作为候选者
- 尝试寻找可行的候选函数
- (1)精确匹配实参
- (2)通过默认参数能够匹配实参
- (3)通过默认类型转换匹配实参
- 匹配失败:
- (1)最终寻找到的候选函数不唯一,则出现二义性,编译失败
- (2)无法匹配所以候选函数,函数未定义,编译失败
#include <stdio.h>
int add(int a, int b) // int(int, int)
{
return a + b;
}
int main()
{
printf("%p\n", add);
return 0;
}
崩溃
总结: