函数重载就是为了实现同一个函数对于不同类型,个数或者顺序的输入参数都可以正常的运行。
重载函数的参数个数、参数类型、参数顺序 三者中必须至少有一种不同(不然会产生调用疑惑)。函数的返回值类型可以相同也可以不同。
上述对于函数重载的要求,我们可以举一个反面例子。比如下面的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; 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; }