1、为什么用函数重载
写一个求两个数的和的代码
#include<stdio.h>
int Sum(int a, int b)
{
return a + b;
}
int main()
{
Sum(10, 20);//ture
Sum(10.8,20.7);//第二种
return 0;
}
如果用第二种的话就会导致结果精度不准确,有人说可以用以下两种解决方式:
(1)泛型 void*,它是不安全,void*只指向了第一个字节的地址,但是不知道这个数据的长度,所以也没办法进行直接操作。在使用时是要自行手动设计的,但是在设计时也并不知道使用时要用怎样的数据,所以存在不安全性。
(2)宏函数
给函数操作前加上#define max(a,b) a>b?a:b
,但是宏是在预编译阶段处理的,它是直接文本替换的过程,没有经过编译阶段的类型检查和安全检查,所以宏也是不安全的。
所以就要用到函数重载
2、函数重载
(1)函数符号生成规则:
如果想要在一个文件中同时使用下面两个函数体
int Sum(int a,int b);
double Sum(double a,double b);
C语言中,函数符号生成规则只和函数名有关,所以C语言认为同一个符号不能表示不同的函数,会报错。
C++中,函数符号生成规则与函数原型有关,也就是与函数返回值、函数名称、函数的形参有关。
(2)函数重载的特点
①同名
②参数不同
③作用域相同