函数的重载 C中,每个函数都必须有唯一的一个名字,这个就必须记住每一个函数的名字。 例如经常所见的求最大值的函数,数据类型不同,函数名不能相同。 int max1(int ,int); int max2(int ,int, int); double max3(double, double); C++中允许同名函数存在,但需要函数的参数不同:即形参个数不同或形参 个数相同,但参数类型有所不同。----这就是重载。 #include <iostream> using namespace std; int max(int,int); double max(double,double); int max(int,int,int); int main() { int i=5, j=9, k=10, p=0; double m=33.4, n=8.9, q=0; p=max(i,j); cout<<i<<","<<j<<"max in two"<<p<<endl; p=max(i,j,k); cout<<i<<","<<j<<","<<k<<"max in three"<<p<<endl; q=max(m,n); cout<<m<<","<<n<<"max in two"<<q<<endl; return 0; } int max(int x,int y) { return x>y?x:y; } double max(double x,double y) { return x>y?x:y; } int max(int x,int y,int z) { int temp; temp = x>y?x:y; temp = temp>z?temp:z; return temp; } 带默认值的函数 函数调用时,形参值是由实参数决定,形参实参必须相同。 C++还提供一种方法,为形参设置一个默认值,即形参不从实参取值。 函数的声明 默认值在函数声明中提供,但当有声明又有定义时,定义中不允许有默认值。 如果函数只有定义,则默认值可以出现在函数定义中。 #include <iostream> using namespace std; void point(int x,int y=0, int z=0) { cout<<"("<<x<<","<<y<<","<<z<<")"<<endl; } int main() { int x,y,z; cout<<"X, Y,Z:"<<endl; cin>>x>>y>>z; point(x); point(x,y); point(x,y,z); return 0; } 带默认值的形参顺序规定 在函数中有多个默认参数,则形参从最右边依次向左设定。当调用函数时,只能向左匹配参数。 错误的表示: void point(int=0,int, int=0); void point(int=0,int=0,int); 调用时: point(x): ok point(x,y);ok point(x,y,z);ok point(); error point(x, , z); error 默认参数与函数重载 使用带默认值的函数可以将一些简单的函数合并为一个函数。但是如果一个函数不能既作为重载函数, 又作为带默认值的函数。会出现二义性,系统无法执行。 例:point(int x,int y); point(int x,int y=0, int z=0); point(x,y); 默认值的限定 默认值:可以是全局变量,全局常量,也可以作为一个函数表达式。默认值不能是局部变量。
