函数重载

函数重载的定义

函数重载是一种特殊情况,C++允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。
函数重载的关键是函数的参数列表(也称函数特征标)

void print(const char * str,int width);    //func1
void print(double d,int width);            //func2
void print(long l,int width);              //func3
void print(int i,int width);               //func4
void print(const char * str);              //func5

上面的函数的特征标都是不同的,所以是5个不同的函数。根据调用函数传入的实参类型,来调用相应的函数。

函数重载中函数匹配的问题
  1. 如果调用函数是print(“sfaner”,5.0);这个函数不与任何原型匹配,则double类型的5.0会被强制转换为int类型的5,并调用第一个函数。
  2. 调用函数是
unsigned int year=2018;
print(year,6)

这个函数不与任何原型匹配,在func2、func3、func4中可能存在三种转换year的方式,在这种情况下,c++将拒绝这种函数调用,并且视为错误。

  1. 在函数重载中,引用和类型本身视为同一个特征标
double cube(double x);
double cube(double & x);

因为在调用cube(length)这个函数是与上面的两个函数都匹配,因此编译器认为这两个函数都是相同的。

  1. 是特征标,而不是函数类型使得可以对函数进行重载。例如
long gronk(int n,float m);
double gronk(int n,float m);   //错误的定义和重载,因为他的特征标都是相同的
double gronk(float n,float m);	//与第一个函数重载,只要特征标不同就能重载了。

只要特征标不同就能重载,如果特征标相同而函数类型不同则不能重载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值