一、缺省参数
1、定义:在函数的声明、定义处,为形参指定一个默认值,在调用该函数时,若无指定实参,则使用该默认值。
注意:缺省参数不能同时出现在定义和声明中,若函数已经声明,则缺省参数只需在声明出给定就好了。
2、分类:缺省参数分为全缺省参数和半缺省参数
全缺省参数:所有形参都赋予默认值;
int Add(int x = 1, int y = 2)
{
return x + y;
}
半缺省参数:部分形参赋予了默认值;半缺省参数d的默认值只能从右往左给定,不能隔着给;
//正确用法
int Add(int a, int b = 1, int c = 2)
{
return a + b + c;
}
//错误缺省
int Add(int a = 0, int b, int c = 2)
{
return a + b + c;
}
3、作用:提高程序的可扩充性
二、函数重载
1、定义:函数名相同,函数参数不同(类型不同、个数不同、顺序不同)的两个函数叫做函数重载。
2、函数重载的判断:函数名相同+函数参数类型、个数、顺序其中一个不同的两个函数即为函数重载。
如下:
//参数类型不同
void Fun1(int x,int y)
{
cout<< x << y <<endl;
}
void Fun1(double x,double y)
{
cout<< x << y <<endl;
}
//参数个数不同
void Fun2(int x)
{
cout<< x <<endl;
}
void Fun2(int x,int y)
{
cout<< x << y <<endl;
}
//参数顺序不同
void Fun3(int x,double y)
{
cout<< x << y <<endl;
}
void Fun3(double x,int y)
{
cout<< x << y <<endl;
}
int main()
{
Fun1(1,2);
Fun2(100);
Fun3(1,1.1);
return 0;
}
以上Fun1,Fun2,Fun3均构成函数重载。
注意:1、函数参数相同,返回值不同的同名函数不构成函数重载。
int Fun(int n)
{
n++;
return n;
}
double Fun(int n)
{
n++;
return n;
}
以上的两个Fun函数不构成函数重载。
2、参数本身是不是const对函数重载没有影响,影响的参数指向的类型。
如以下这两对都不是函数重载:
A:int cal(int a, int b); int cal(int const a, int const b);
B:int cal(int* a, int*b);int cal(int* const a, int* const b);
而以下这一对是函数重载:
C:int cal(int* a,int* b);int cal(const int* a, const int* b)
3、作用:函数名可以相同,提高复用性
三、引用
1、定义:引用简单说就是给变量起一个别名。
格式为:类型 &引用变量名 = 已定义过的变量名。
2、特点:引用必须被初始化、引用不能改变所指向的对象、没有指向NULL的引用,一个变量可以有多个别名。
3、用法:
引用作参数:
引用作返回值:
常引用:
四、内联函数
1、定义:如果要把一个函数定义为一个内联函数,只需要在其定义前加上关键字inline;在类定义中的定义的函数都是内联函数,即使没有使用 inline 关键字。
注意:inline只是给编译器一个建议,如果函数的代码行数过多或其它原因,编译器会无视inline关键字。
inline void print(char *s)
{
printf("%s", s);
}
2、目的:取代#define宏定义函数,提高程序的运行效率。
3、利弊
利:避免了指令的来回跳转,加快程序执行速率。
弊:代码被多次复制,增加了代码量,占用给多的内存空间。
适用:函数本身内容较少,代码比较短,内容较为简单,函数内没有循环、递归等语句。