c++函数重载与缺省参数

函数重载:是指同一作用域内,一组具有相同函数名,不同参数列表的函数,构成重载关系,这组名称相同的函数成为重载函数。重载函数通常完成的功能相近,这样做的好处是减少了函数名的数量,提高了程序的可读性。

注意:重载与函数的返回类型无关,参数相同仅返回值不同的两个函数不构成重载关系,与形参名字无关,只与参数的个数、类型、顺序有关。

//可以构成重载关系的例子

void   fun(void);

void  fun(int);

void  fun(double);

void fun(int , double)

void fun( double, int);

相同类型的引用与非引用类型不构成重载关系,例如:void fun( int );与void fun( int & r);不构成重载关系。

重载解析:在函数调用的时候,根据实参与形参的类型匹配情况,选择一个确定的重载版本,这个过程叫做重载解析。

注意:只有在同一个作用域中的同名函数才会涉及到重载问题,不同作用域中的同名函数遵循隐藏的原则。

函数指针与重载的关系:函数指针的类型决定与其匹配的重载版本。例如:

double fun(int n);

char * fun(float n);

doule (*pfun)(int) = fun;//对应double fun(int n);

char *( *pfun)(float) = fun;//对应char * fun(float n);

C++中的函数重载是通过函数换名来实现的,因此换名机制业限制了C语言和C++模块之间的交叉引用。通过extern "C"可以要求C++编译器按照C语言的处理方式处理函数接口,因此不做换名处理,也就无法进行重载。

函数缺省参数

函数缺省参数:即可以为函数的部分或全部形参指定缺省值,调用该函数时,如果不给实参,就取缺省值作为相应的形参的值。

注意:(使用确实值时的注意事项)

1、函数缺省参数必须靠右,如果一个参数有缺省值,那么 这个参数的右侧所有参数都必须有缺省值。

2、如果需要将函数的定义和声明分开,缺省参数只能写在函数声明的部分,而定义部分不要指定函数的缺省参数,但是可以通过注释的方式提高代码的可读性。

//缺省参数使用
void func(int a,int b=100/*缺省参数*/){
    return a+b;
}
//缺省参数必须靠右
void func(int a=20,int b);//error
void func(int b,int a=20);//ok
//函数声明的时候写缺省值,定义是不能写
void fun( int a,int b=100 );//声明
void fun( int a,int d /* =100  */){//函数的定义
    return a+ b;
}
//函数某个参数缺省则其右侧所有参数都必须要有缺省值
void func(int b,int a=20,int b =10,int c );//error
void func(int b,int a=20,int b =10,int c=5 );//ok

猜你喜欢

转载自blog.csdn.net/sing_Hwang/article/details/84206175