合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
>[info] # 函数的重载 ## **重载的需要性** 在不同类型上做类似运算而又用相同名字的情况称为**重载 (function overloading)**,即重新定义语义. ~~~ //重载前: int abs(int); long fbs(long); double lbs(double); //重载后 int abs(int); long abs(long); double abs(double); ~~~ **重载解析**:C++用一种函数命名技术可以准确判断应该调用哪个重载函数. ~~~ abs(10) //调用int abs(int) abs(100000000000) //调用long abs(long) abs(10.000000000) //调用double abs(double) ~~~ ## **使用说明** * 返回类型不能单独作为重载解析的依据;参数个数,类型,顺序三者种必须至少有一种不同. 如: void func(int); int func(int); //error * 不能用typedef定义的类型名来区分重载函数声明中的参数. * 让重载执行不同的功能,是不好的编程风格. ## **例子** ~~~ void print(double); void print(int); void func() { print(1); //匹配void print(int) printf(1.0); //匹配void print(double) print(’a’); //匹配void print(int) print(3.1415f); //匹配void print(double) } ~~~ ~~~ /* ***求3个数中最大的数(分别考虑整数,双精度数,长整数的情况)*** */ #include <iostream> using namespace std; int main( ) { int max(int a,int b,int c); //函数声明 double max(double a,double b,double c); //函数声明 long max(long a,long b,long c); //函数声明 int i1,i2,i3,i; cin>>i1>>i2>>i3; //输入3个整数 i=max(i1,i2,i3); //求3个整数中的最大者 cout<<”i_max=”<<i<<endl; double d1,d2,d3,d; cin>>d1>>d2>>d3; //输入3个双精度数 d=max(d1,d2,d3); //求3个双精度数中的最大者 cout<<”d_max=”<<d<<endl; long g1,g2,g3,g; cin>>g1>>g2>>g3; //输入3个长整数 g=max(g1,g2,g3); //求3个长整数中的最大者 cout<<”g_max=”<<g<<endl; } int max(int a,int b,int c) //定义求3个整数中的最大者的函数 { if(b>a) a=b; if(c>a) a=c; return a; } double max(double a,double b,double c) //定义求3个双精度数中的最大者的函数 { if(b>a) a=b; if(c>a) a=c; return a; } long max(long a,long b,long c) //定义求3个长整数中的最大者的函数 { if(b>a) a=b; if(c>a) a=c; return a; } ~~~ ~~~ /* ***求两个整数或3个整数中的最大数*** */ #include <iostream> using namespace std; int main( ) { int max(int a,int b,int c); //函数声明 int max(int a,int b); //函数声明 int a=8,b=-12,c=27; cout<<”max(a,b,c)=”<<max(a,b,c)<<endl; //输出3个整数中的最大者 cout<<”max(a,b)=”<<max(a,b)<<endl; //输出两个整数中的最大者 } int max(int a,int b,int c) //此max函数的作用是求3个整数中的最大者 { if(b>a) a=b; if(c>a) a=c; return a; } int max(int a,int b) //此max函数的作用是求两个整数中的最大者 { if(a>b) return a; else return b; } ~~~