C++学习笔记基础篇24——函数重载与默认参数

什么是函数重载

函数重载就是为了实现同一个函数对于不同类型,个数或者顺序的输入参数都可以正常的运行。

重载函数的参数个数、参数类型、参数顺序 三者中必须至少有一种不同(不然会产生调用疑惑)。函数的返回值类型可以相同也可以不同。

上述对于函数重载的要求,我们可以举一个反面例子。比如下面的int max_num(int a, int b);bool max_num(int a, int b); 只有返回值类型不同。这样会导致系统不知道调用哪一个。编译直接报错。

int max_num(int a, int b);
bool max_num(int a, int b);
float max_num(float a, float b);

举例

#include <iostream>
#include <string>
using namespace std;
void get_min_max(int src[], int arr_len, int* max_v = NULL, int* min_v = NULL)
{
	if (arr_len < 0 || (!max_v && !min_v)) return;

	int var_max = src[0], var_min = src[0];
	for (int i = 1; i < arr_len; ++i)
	{
		if (var_min > src[i]) var_min = src[i];
		if (var_max < src[i]) var_max = src[i];
	}

	if (max_v) *max_v = var_max;
	if (min_v) *min_v = var_min;
}
int main()
{
	int src[] = { 66, 33, 55, 22, 88, 89, 19 };

	int max_v = 0;
	get_min_max(src, sizeof(src) / sizeof(int), &max_v); //只获取最大值
	cout << "最大值是:" << max_v << endl;

	int min_v = 0;
	get_min_max(src, sizeof(src) / sizeof(int), NULL, &min_v); //只获取最小值
	cout << "最小值是:" << min_v << endl;
	system("pause");
	return 0;
}

函数默认参数的注意事项:

①、在函数声明的时候指定,如果没有函数的声明则可以放在函数的定义中,但是声明和定义只能选一个;
②、从第一个有默认值的参数开始,后面的所有参数必须都有默认值才行;
③、调用的时候如果要自定义非第一个默认值的参数,那么前面所有的参数都要明确的写上默认值才行;
④、从使用角度来说函数的默认值比重载更方便,从函数内部实现角度来说比函数的重载更复杂。

#include <iostream>
#include <string>
using namespace std;
bool string_upper_diy(char str[], int str_len, bool b_odd_pos = true)
{
	//char* pstr = str;
	if (str_len < 0)
	{
		cout << "输入有问题" << endl;
		return 0;
	}
	if (b_odd_pos == true)
	{
		for (int i = 0; i < str_len; i = i + 2)
		{
			if (str[i] >= 'a'&& str[i] <= 'z')
			{
				str[i] = str[i] - 32;
			}
		}
		for (int ii = 1; ii < str_len; ii = ii + 2)
		{
			if (str[ii] >= 'A'&& str[ii] <= 'Z')
			{
				str[ii] = str[ii] + 32;
			}
		}
	}
	else
	{
		for (int i = 1; i < str_len; i = i + 2)
		{
			if (str[i] >= 'a'&& str[i] <= 'z')
			{
				str[i] = str[i] - 32;
			}
		}
		for (int ii = 0; ii < str_len; ii = ii + 2)
		{
			if (str[ii] >= 'A'&& str[ii] <= 'Z')
			{
				str[ii] = str[ii] + 32;
			}
		}
	}
	return 0;
}

int main()
{
	char str[50] = "asdhjAAAABFD";
	string_upper_diy(str, sizeof(str) / sizeof(char), false);
	cout << "输出字符串" << str << endl;
	system("pause");
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值