C++函数详解
内联函数
内联函数的函数体限制:
1、内联函数中,不能含有复杂的结构控制语句
2、递归函数(自己调用自己的函数)是不能被用来做内联函数的。
3、内联函数只适合于只有l到5行的小函数
#include <iostream>
using namespace std;
inline double calc(double x)
{
return x*x;
}
int main()
{
cout << calc(3 + 2) << endl;
return 0;
}
函数指针
#include <iostream>
using namespace std;
int calc(int a, int b)
{
return a*b;
}
int main()
{
int(*pf)(int, int);//声明函数指针:用*pf代替函数名
pf = calc;//赋值
int x = (*pf)(3, 2);//调用方式一
cout << x << endl;//6
x = pf(4, 5);//调用方式二
cout << x << endl; //20
return 0;
}
默认参数
在具有多个参数的函数中指定默认值时,默认参数都必须出现在不默认参数的右边,一旦某个参数开始指定默认值,它右边的所有参数都必须指定默认值
int f (int i1, int i2 = 2, int i3 = 3); // 正确
int g (int i1, int i2 = 2, int i3); // 错误, i3未指定默认值
int h (int i1 = 1, int i2, int i3 = 3); // 错误, i2未指定默认值
在调用具有默认参数的函数时, 若某个实参默认,其右边的所有实参都应该默认
例如, 一个函数声明如下int f(int i1 = 1, int i2 =2, int i3 = 3);
调用函数 f()
f(); //正确, i1=1, i2=2, i3=3
f(3); //正确, i1=3, i2=2, i3=3
f(2, 3); //正确, i1=2, i2=3, i3=3
f(4, 5, 6); //正确, i1=4, i2=5, i3=6
f(, 2, 3); //错误, i1默认,其右边的i2和i3没有默认
函数重载
参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同
函数名相同,参数列表不同的函数称为函数重载
重载函数的返回类型可以不同
编译器不以形参名来区分,不以返回值来区分
#include <iostream>
using namespace std;
void Swap(int *a, int *b); //交换 int 变量的值
void Swap(double *a, double *b); //交换 double 变量的值
int main()
{
//交换 int 变量的值
int n1 = 100, n2 = 200;
Swap(&n1, &n2);
cout << n1 << ", " << n2 << endl;
//交换 double 变量的值
double f1 = 12.5, f2 = 56.93;
Swap(&f1, &f2);
cout << f1 << ", " << f2 << endl;
}
//交换 int 变量的值
void Swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
//交换 double 变量的值
void Swap(double *a, double *b) {
double temp = *a;
*a = *b;
*b = temp;
}