1、默认参数
1)形式:
int Add(int a = 1, int b = 2, int c = 3)
{
return a + b + c;
}
【说明】:必须从右向左添加默认值,以下是无效的
//int AddWrong(int a = 1, int b, int c = 3);
2)使用:
cout << Add(4) << endl; // 9
cout << Add(4, 4) << endl; // 11
cout << Add(4, 4, 4) << endl; //12
【说明】:参数赋值从左向右。
【错误使用】:
//cout << Add(4 , , 2) << endl; //Invalid
【说明】:默认参数可以使用不同数目的参数调用同一个函数,而函数重载能够使用多个同名的函数。
2、函数重载
1)定义两个函数,两个函数参数个数不同,其中一个存在默认参数,
int Add(int a = 1, int b = 2, int c = 3)
{
return a + b + c;
}
int Add(int x, int y)
{
return x + y;
}
在调用:Add(4, 4)时会报错,因为编译器不知道应该调用哪个函数
2)函数参数个数相同,其中一个引用
int Sub(int x, int y)
{
std::cout << "Sub(int x, int y)" << std::endl;
return x - y;
}
int Sub(int& x, int& y)
{
std::cout << "Sub(int& x, int& y)" << std::endl;
return x - y;
}
调用:Sub(1,2);走到的是int Sub(int x, int y)。
【说明】:尽量避免这种编程方法,原因:
(1)有可能不能获取想要的结果。
(2)如果是这样:
int a = 1;
int b = 2;
cout << Sub(a, b) << endl;
那么编译就会报错。
3)函数参数个数相同,其中一个为const(int)
int Sub(int x, int y)
{
std::cout << "Sub(int x, int y)" << std::endl;
return x - y;
}
int Sub(const int x, const int y)
{
std::cout << "Sub(const int x, const int y)" << std::endl;
return x - y;
}
调用:Sub(1,2);会报错。
4)函数参数个数相同,其中一个为const(char*)
void TestChar(char* input_char)
{
std::cout << "TestChar(char* input_char)" << std::endl;
}
void TestChar(const char* input_char)
{
std::cout << "TestChar(const char* input_char)" << std::endl;
}
char array_a[10] = "hello";
const char array_b[10] = "hello";
TestChar(array_a);
TestChar(array_b);
上面的代码能够正常运行。那么根据4)将3)进行改造,使用指针是否有效?
5)函数参数个数相同,其中一个为const(int*)
int Sub(int* x, int* y)
{
std::cout << "Sub(int* x, int* y)" << std::endl;
return *x - *y;
}
int Sub(const int* x, const int* y)
{
std::cout << "Sub(const int* x, const int* y)" << std::endl;
return *x - *y;
}
int a = 1;
int b = 2;
cout << Sub(&a, &b) << endl;
const int c = 1;
const int d = 2;
cout << Sub(&c, &d) << endl;
上面的代码能够正常运行。
【说明】:对于定义的指针变量,如果两个函数入参存在const的区别,C++编译器是能够很好的区分。
6)指针可以,那么引用呢?
int Mul(int& x, int& y)
{
std::cout << "Mul(int& x, int& y)" << std::endl;
return x * y;
}
int Mul(const int& x, const int& y)
{
std::cout << "Mul(const int& x, const int& y))" << std::endl;
return x * y;
}
int mul1 = 1;
int mul2 = 2;
int const mul3 = 1;
int const mul4 = 2;
cout << Mul(mul1, mul2) << endl;
cout << Mul(mul3, mul4) << endl;
以上代码可以正常运行。
【说明】:对于引用来说,如果两个函数入参存在const的区别,C++编译器是能够很好的区分。
1)形式:
int Add(int a = 1, int b = 2, int c = 3)
{
return a + b + c;
}
【说明】:必须从右向左添加默认值,以下是无效的
//int AddWrong(int a = 1, int b, int c = 3);
2)使用:
cout << Add(4) << endl; // 9
cout << Add(4, 4) << endl; // 11
cout << Add(4, 4, 4) << endl; //12
【说明】:参数赋值从左向右。
【错误使用】:
//cout << Add(4 , , 2) << endl; //Invalid
【说明】:默认参数可以使用不同数目的参数调用同一个函数,而函数重载能够使用多个同名的函数。
2、函数重载
1)定义两个函数,两个函数参数个数不同,其中一个存在默认参数,
int Add(int a = 1, int b = 2, int c = 3)
{
return a + b + c;
}
int Add(int x, int y)
{
return x + y;
}
在调用:Add(4, 4)时会报错,因为编译器不知道应该调用哪个函数
2)函数参数个数相同,其中一个引用
int Sub(int x, int y)
{
std::cout << "Sub(int x, int y)" << std::endl;
return x - y;
}
int Sub(int& x, int& y)
{
std::cout << "Sub(int& x, int& y)" << std::endl;
return x - y;
}
调用:Sub(1,2);走到的是int Sub(int x, int y)。
【说明】:尽量避免这种编程方法,原因:
(1)有可能不能获取想要的结果。
(2)如果是这样:
int a = 1;
int b = 2;
cout << Sub(a, b) << endl;
那么编译就会报错。
3)函数参数个数相同,其中一个为const(int)
int Sub(int x, int y)
{
std::cout << "Sub(int x, int y)" << std::endl;
return x - y;
}
int Sub(const int x, const int y)
{
std::cout << "Sub(const int x, const int y)" << std::endl;
return x - y;
}
调用:Sub(1,2);会报错。
4)函数参数个数相同,其中一个为const(char*)
void TestChar(char* input_char)
{
std::cout << "TestChar(char* input_char)" << std::endl;
}
void TestChar(const char* input_char)
{
std::cout << "TestChar(const char* input_char)" << std::endl;
}
char array_a[10] = "hello";
const char array_b[10] = "hello";
TestChar(array_a);
TestChar(array_b);
上面的代码能够正常运行。那么根据4)将3)进行改造,使用指针是否有效?
5)函数参数个数相同,其中一个为const(int*)
int Sub(int* x, int* y)
{
std::cout << "Sub(int* x, int* y)" << std::endl;
return *x - *y;
}
int Sub(const int* x, const int* y)
{
std::cout << "Sub(const int* x, const int* y)" << std::endl;
return *x - *y;
}
int a = 1;
int b = 2;
cout << Sub(&a, &b) << endl;
const int c = 1;
const int d = 2;
cout << Sub(&c, &d) << endl;
上面的代码能够正常运行。
【说明】:对于定义的指针变量,如果两个函数入参存在const的区别,C++编译器是能够很好的区分。
6)指针可以,那么引用呢?
int Mul(int& x, int& y)
{
std::cout << "Mul(int& x, int& y)" << std::endl;
return x * y;
}
int Mul(const int& x, const int& y)
{
std::cout << "Mul(const int& x, const int& y))" << std::endl;
return x * y;
}
int mul1 = 1;
int mul2 = 2;
int const mul3 = 1;
int const mul4 = 2;
cout << Mul(mul1, mul2) << endl;
cout << Mul(mul3, mul4) << endl;
以上代码可以正常运行。
【说明】:对于引用来说,如果两个函数入参存在const的区别,C++编译器是能够很好的区分。