我是靠谱客的博主 幽默棒棒糖,最近开发中收集的这篇文章主要介绍函数重载(定义及使用案例),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

函数重载就像是一个词有多重含义(就像英语)。比如: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++将拒绝这种函数调用,并将其视为错误。

最后

以上就是幽默棒棒糖为你收集整理的函数重载(定义及使用案例)的全部内容,希望文章能够帮你解决函数重载(定义及使用案例)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部