函数重载
作用:函数名可以相同,提高复用性
函数重载满足条件:
1、同一个作用域
2、函数名称相同
3、函数参数类型不同或者个数不同或者顺序不同
4、函数的返回值不可以作为函数重载的条件
例子:
void print(const char*str,int width);#1
void print(double d,int width);#2
void print(long l,int width);#3
void print(int i,int width);#4
void print(const char*str);#5
使用print函数时,编译器将根据所采取的用法使用相应的特征标的原型:
print("abc",14)//使用1
print("abc")//使用5
print(13.0,14)//使用2
print(13,14)//使用4
print(13L,14)//使用3
注意:
unsigned int year = 1111;
print(year,6)//不会有匹配的
/*调用时没有匹配的原型不会自动停止使用其中的某个函数,因为c++将尝试使用
标准类型转换强制进行匹配,如果2原型是唯一的print原型,则函数调用print(year,6)会将year转换为double类型,但在上面的函数原型中,
有三个将数字作为第一个参数原型的,因此有三种转换year的方式,在这种情况下c++将拒绝这种函数调用
*/
匹配函数时并不区分const和非const变量
void dribble(char* bits);
void dribble(const char* cbits);
void dabble(char* bits);
void drivel(const char* bits);
//dribble有两个函数原型,一个用于const指针,另一个用于常规指针,编译器将根据实参是否为const来决定使用那个原型。dabble只和非const的匹配
//drivel可以和const与非const匹配。drivel和dabble之间之所以有这种差距,主要是由于将非const值赋值给const变量是合法的,反之是不合法的。
引用
引用实际上是一个常量指针。
作用:给变量起别名 。注意:给变量取别名
语法:数据类型 & 别名 = 原名。
引用必须初始化。
引用在初始化之后不可以改变。
函数传递参数时,可以利用引用技术让形参修饰实参(简化指针修改实参)、
临时变量、引用参数、const
如果实参与引用参数不匹配的时候,c++将生成临时变量,当前,仅当参数为const引用时才允许这样做。
什么时候创建临时变量:
1、实参的类型不正确,不是左值
2、实参的类型不正确,但可以转换为正确类型