一、 函数的默认参数能够让你 使用不同的参数调用同一个函数;函数重载让你可以使用多个同名的函数:
多参数–>一个函数(默认参数–默认参数不可跳过,必须从右至左添加默认值);
多函数–>同个数,不同类型的参数(函数重载–关键是函数的参数列表,也叫做函数特征标(function signature))
function signature 相同性定义:两个函数参数数目 和 类型相同,同时参数的排列顺序也相同,则表示他们的function signature 相同。
即:
1. 参数数目
2. 参数类型
3. 参数的排列顺序
【注意】:一般类型转换 都允许 较高类型的数据类型转换为低类型的数据类型;
比如:
double ←── float 高
↑
long
↑
unsigned
↑
int ←── char,short 低
【原因】当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。
因此,在函数重载中,如果编译器没能找到完全匹配的function signature, 那么C++会会自动进行类型转换找到合适的函数进行调用。但是,经过转换之后,不能有超过两个可以调用的函数,C++不知道要调用谁了。
比如:
void test(int a, int b);
void test(long a, int b);
void test(double a, int b);
那么在调用函数时:
unsigned int temp = 1000;
test(temp, 1);
// 此时,编译器可以调用以上三个函数来完成操作,那么它调用谁呢?所以此时编译器会报错;
// 编译器无法确定到底使用哪一个类型
如果上面的函数只有唯一的一个,那么C++时允许的。
例如:
double cube(double x);
double cube(double& x); 这两个也是不允许的,cube(1.0) 调用哪一个呢?
【注意】:把非const值赋值给 const变量时合法的,但反之是不合法的。