C++note3

来源:互联网 发布:维纳滤波算法 编辑:程序博客网 时间:2024/04/29 01:35
 函数的重载
 
 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);
    
    
 默认值的限定
默认值:可以是全局变量,全局常量,也可以作为一个函数表达式。默认值不能是局部变量。
原创粉丝点击