函数的特性

内联函数

内联函数在编译时,被嵌入到主调函数中。

一般只有简单且频繁调用的函数才能成为内联函数。

// 定义内联函数
inline int f(int a, int b);

int main()
{
	for (int i = 0; i < 10000; i++)
	{
		//cout << f(10, i) << ", ";
		cout << 10 + i << ", ";
	}
	cout << endl;
	return 0;
}

int f(int a, int b)
{
	return a + b;
}

函数重载

在C++中可以定义多个同名函数,只要它们的形参的个数或类型不完全相同就可以,这些同名函数称为重载函数。

程序根据实参与形参的类型及个数自动确定调用哪一个同名函数。

//	定义重载函数myMax
int myMax(int a, int b);

float myMax(float a, float b);

int main()
{
	int i1 = 1, i2 = 0;
	float f1 = 1.0, f2 = 2.0;
	//	根据参数确定调用哪个重载函数
	myMax(1, 0);
	myMax(1.0f, 0.0f);

	return 0;
}

int myMax(int a, int b)
{
	cout << "int max(int a, int b)" << endl;
	if (a > b)
	{
		return a;
	}
	return b;
}

float myMax(float a, float b)
{
	cout << "float max(float a, float b)" << endl;
	if (a > b)
	{
		return a;
	}
	return b;
}

带默认值的函数

函数声明或定义时,可以预先为函数参数指定默认值。

函数调用时,如果给出实参则使用实参,否则使用形参的默认值。

形参默认值必须由右向左顺序定义,否则编译时会产生错误。

//	默认值可以在函数声明时给出
float power(float m , int n = 2);
/*
	形参默认值必须由右向左顺序定义,否则编译时会产生错误
	f(int a, int b, int c = 10); 正确
	f(int a, int b= 10, int c = 10); 正确
	f(int a, int b= 10, int c ); 错误
	f(int a =10, int b= 10, int c ); 错误
	f(int a =10, int b, int c ); 错误
*/
int main()
{
	//	在函数调用时,如果给出实参则使用实参,否则使用形参的默认值
	cout << power(2) << endl;
	cout << power(2, 3) << endl;
	return 0;
}

float power(float m, int n)
{
	float r = 1.0;
	for (int i = 0; i < n; i++)
	{
		r *= m;
	}
	return r;
}

函数指针

函数所占用内存的起始值地址就是函数的地址,用于保存函数地址的指针变量称为函数指针变量。

函数指针变量用于调用函数。

int myAdd(int x, int y);
int myMinus(int x, int y);

int main()
{
	int a = 20;

	//	定义函数指针,用于指向具有两个int型参数,并且返回int型参数的函数。
	int (*fp)(int, int);

	//	使用函数指针调用myAdd函数
	fp = myAdd;
	a = fp(10, 10);
	cout << "a: " << a << endl;

	//	使用函数指针调用myMinus函数
	fp = myMinus;
	a = fp(10, 10);
	cout << "a: " << a << endl;

	return 0;
}

int myAdd(int x, int y)
{
	return x + y;
}
int myMinus(int x, int y)
{
	return x - y;
}

函数的嵌套调用与递归调用

函数的嵌套调用

嵌套调用指被调函数中又调用了其他函数。

//	多个阶乘求和。例如n个阶乘求和, 0! + 1! + 2! + 3! ... + n!

//	多个阶乘的结果求和
int f1(int n);

//	计算m的阶乘
int f2(int m);

int main()
{	
	cout << f1(3) << endl;
	return 0;
}

int f1(int n)
{
	int sum = 0;
	for (int i = 0; i <= n; i++)
	{
		sum += f2(i);
	}
	return sum;
}

int f2(int m)
{
	int r = 1;
	for (int i = 1; i <= m; i++)
	{
		r *= i;
	}	
	return r;
}

递归调用

函数直接或间接调用它本身,称为递归调用。这种函数叫做递归函数。

//	递归求阶乘
int myPower(int n);

int main()
{
	cout << myPower(0) << endl;
	cout << myPower(3) << endl;
	cout << myPower(30) << endl;
	return 0;
}

int myPower(int n)
{
	int r;
	if (n > 1)
	{
		r = n * myPower(n - 1);
	}
	else 
	{
		r = 1;
	}
	return r;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值