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

    科技2022-07-11  99

    什么是函数重载

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

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

    上述对于函数重载的要求,我们可以举一个反面例子。比如下面的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; }
    Processed: 0.038, SQL: 8