概述
函数重载就像是一个词有多重含义(就像英语)。比如:sprIng
If leeks are unavailable, use spring onions instead.
如果没有韭葱,就用洋葱苗来替代。
Spring is here again.
春天又来了。
helical spring
螺旋形弹簧
以上案例取自:https://fanyi.so.com/#spring
由此可见,同一个词在不同的环境中代表的含义不同,可以根据上下文来确定。函数重载与此类似,即一个函数可以用来执行不同的操作,那么如何判定函数在不同情况下执行哪一个操作呢?这个关键就在于函数的参数列表——也称为函数特征标(function signature)。
c++允许定义名称相同的函数(即使用函数重载),但是他们的使用环境不能相同,即参数列表不同!(参数列表的变量名无关紧要)
参数列表不同包括:参数数目不同 和/或 参数类型不同
具体案例有如下:
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("pognrijgf",15); // use #1
print("ofgnkoijr"); // use #5
print(1999.0,10); // use #2
print(1999,21); // use #4
print(199L,15); // use #3
使用函数重载时,要在函数调用中使用正确的参数类型。例如,对于下面的语句,函数print()不与任何原型匹配。
unsigned int year=3210;
print(year,6);
但是!!!没有匹配的原型并不会自动停止使用其中的某个函数,因为c++将尝试使用标准类型转换强制进行匹配。如果#2原型是print()唯一的原型,则函数调用print(year,6)将year转换成double类型。但是在以上的代码中,有3个将数字作为第一个参数的原型,因此有3种转换year的方式,这种情况下,c++将拒绝这种函数调用,并将其视为错误。
最后
以上就是幽默棒棒糖为你收集整理的函数重载(定义及使用案例)的全部内容,希望文章能够帮你解决函数重载(定义及使用案例)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复