资源描述:
《c的函数重载剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C++的函数重载剖析TheAnalysisofFunctionOverloadinginC++庞新法PANGXin-fa(陕西省委党校科技教研部,西安710061)(TechnologyResearchDepartment,ShaanxiProvincePartySchooloftheCPC,Xi'an710061,China)摘要院木文介绍了什么是函数重载、为什么需要函数重载、编译器如何解决函数重名问题、编译器如何解析重载函数的调用。通过案例予以解释分析,旨在提高C垣垣编程质量。Abstract:Thispaperintroduces
2、whatisthefunctionoverloading,whyoverloadedfunctionsareneeded,howtosolvetheproblemofthecompilerfunctionnameandhowthecompilerresolvesoverloadedfunctioncall.ItisinterpretedthroughcaseanalysisinordertoimprovethequalityoftheC++programming.关键词院程序设计;面向对象;函数重载Keywords:programdes
3、ign;objectoriented;functionoverloading中图分类号院TP313文献标识码院A文章编号院1006-4311(2014)25-0228-021绪论在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C垣垣中,函数名相同而参数不同的两个函数被解释为重载。使用函数重载可以帮助程序员应付更多的复杂性,避免了使用繁杂的函数名称。C++可以对不同功能赋予相同的函数名,函数调用时,由编译程序根据上下文(实参的类型,个数)理解确定调用哪一个,以方便用户管理和使用函数名。自然语言中的“一词多义”,反映到程序中就是
4、重载。例1通过重载求a的绝对值intabs(inta){returna>0?a:-a;}doubleabs(doublea){returna>0?a:-a;}voidmain(){cout<<abs(-10)<<endl;//调用(匹配)abs(inta)cout<<abs(・5.4)<&t;endl;//调用(匹配)abs(doublea)}2兀配重载函数C垣垣允许功能相似的函数在相同的作用域内以相同的函数名声明,从而形成重载。那么用户调用同名函数时,编译程序如何确定(匹配)到底调
5、用哪一个函数,称为匹配重载函数。编译吋,根据作用域、返冋值类型、函数名、形参类型、形参顺序把同名函数转换成不同名函数(用函数内部名),内部函数名构成规则:作用域+返冋值类型+函数名+形参列表。匹配重载函数吋按以下优先级进行:淤精确匹配:参数匹配而不做转换,或只做微不足道的转换。于隐式转换匹配。盂自定义匹配。榆编译程序寻找匹配函数吋,函数的类型不起作用。2.1重载函数必须在同一作用域内例2/*file2.c文件*/staticintabs(inta){returna>O?a:-a;}staticdoubleabs(doublea){
6、returna>0?a:-a;}voidmain(){cout<<abs(-10)<<endl;//调用(匹配)abs(inta)cout<<abs(-5.4)<<endl;//调用(匹配)abs(doublea)}intabs(inta),doubleabs(doublea),voidmain()在同一作用域内,main既可调用intabs(inta),又可调用doubleabs(doublea)ointabs(inta),doubleabs(doublea)是重载函数。2.2重载
7、函数具有不同的形参不同的形参指的是形参类型不同、形参个数不同、形参顺序不同。淤形参类型不同。如intadd(intx,inty);floatadd(floatx,floaty);于形参个数不同o如intadd(intx,inty);intadd(intx,intyjntz);盂形参顺序不同。女口floatadd(intx,floaty);floatadd(floatx,inty);函数intadd(intx,inty)、floatadd(floatx,floaty)>intadd(intx,intyjntz)、floatadd(intx
8、,floaty)、floatadd(floatx,inty)是重载函数。例3voidmain(){cout<<add(2,3)<<endl;〃调用精确匹配intadd(intx,in