已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在编程时,有时我们要实现的是同一类的功能,只是有些细节不同。例如希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。程序设计者往往会分别设计出3个不同名的函数,其函数原型为:intmax1(inta,intb,intc);/求3个整数中的最大者doublemax2(doublea,doubleb,doublec);/求3个双精度数中最大者longmax3(longa,longb,longc);/求3个长整数中的最大者C+允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载(functionoverloading)。即对一个函数名重新赋予它新的含义,使一个函数名可以多用。,*4.6函数的重载,对上面求最大数的问题可以编写如下的C+程序。例4.5求3个数中最大的数(分别考虑整数、双精度数、长整数的情况)。#includeusingnamespacestd;intmain()intmax(inta,intb,intc);/函数声明doublemax(doublea,doubleb,doublec);/函数声明longmax(longa,longb,longc);/函数声明inti1,i2,i3,i;cini1i2i3;/输入3个整数i=max(i1,i2,i3);/求3个整数中的最大者coutd1d2d3;/输入3个双精度数d=max(d1,d2,d3);/求3个双精度数中的最大者coutg1g2g3;/输入3个长整数,g=max(g1,g2,g3);/求3个长整数中的最大者couta)a=b;if(ca)a=c;returna;doublemax(doublea,doubleb,doublec)/定义求3个双精度数中的最大者的函数if(ba)a=b;if(ca)a=c;returna;longmax(longa,longb,longc)/定义求3个长整数中的最大者的函数if(ba)a=b;if(ca)a=c;returna;,运行情况如下:185-76567(输入3个整数)56.8790.23-3214.78(输入3个实数)67854-912456673456(输入3个长整数)i_max=567(输出3个整数的最大值)d_max=90.23(输出3个双精度数的最大值)g_max=673456(输出3个长整数的最大值)上例3个max函数的函数体是相同的,其实重载函数并不要求函数体相同。重载函数除了允许参数类型不同以外,还允许参数的个数不同。,例4.6编写一个程序,用来求两个整数或3个整数中的最大数。如果输入两个整数,程序就输出这两个整数中的最大数,如果输入3个整数,程序就输出这3个整数中的最大数。#includeusingnamespacestd;intmain()intmax(inta,intb,intc);/函数声明intmax(inta,intb);/函数声明inta=8,b=-12,c=27;couta)a=b;,if(ca)a=c;returna;intmax(inta,intb)/此max函数的作用是求两个整数中的最大者if(ab)returna;elsereturnb;运行情况如下:max(a,b,c)=27max(a,b)=8两次调用max函数的参数个数不同,系统就根据参数的个数找到与之匹配的函数并调用它。参数的个数和类型可以都不同。但不能只有函数的类型不同而参数的个数和类型相同。例如:,intf(int);/函数返回值为整型longf(int);/函数返回值为长整型voidf(int);/函数无返回值在函数调用时都是同一形式,如“f(10)”。编译系统无法判别应该调用哪一个函数。重载函数的参数个数、参数类型或参数顺序3者中必须至少有一种不同,函数返回值类型可以相同也可以不同。在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人莫名其妙。,C+提供了函数模板(functiontemplate)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。看下面的例子就清楚了。例4.7将例4.6程序改为通过函数模板来实现。,*4.7函数模板,#includeusingnamespacestd;template/模板声明,其中T为类型参数Tmax(Ta,Tb,Tc)/定义一个通用函数,用T作虚拟的类型名if(ba)a=b;if(ca)a=c;returna;intmain()inti1=185,i2=-76,i3=567,i;doubled1=56.87,d2=90.23,d3=-3214.78,d;longg1=67854,g2=-912456,g3=673456,g;i=max(i1,i2,i3);/调用模板函数,此时T被int取代d=max(d1,d2,d3);/调用模板函数,此时T被double取代g=max(g1,g2,g3);/调用模板函数,此时T被long取代couti_max=iendl;coutf_max=fendl;coutg_max=ga)a=c;returna;然后调用它。后面两行(14,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 6675.4-2025玩具安全第4部分:特定元素的迁移
- 天津体育学院《自然科学(电工学)》2024-2025学年第一学期期末试卷
- 糖尿病足溃疡预防措施
- 老年人糖尿病饮食管理方案与康复计划
- 重庆公共运输职业学院《海洋生物资源综合利用》2024-2025学年第一学期期末试卷
- 宁夏银川市银川一中2025年化学高二第一学期期末考试试题含解析
- 湖南省醴陵市第二中学2025-2026学年高二物理第一学期期末复习检测模拟试题含解析
- 肾内科肾衰竭患者透析护理培训指南
- 麻醉科全麻下气管插管护理须知
- 糖尿病康复训练计划
- 歌尔社招人才测评试卷
- 第五章排球大单元教学设计课时教学设计人教版初中体育与健康七年级全一册
- 2023学年完整公开课版感叹句说课
- WJ30059-2023军用爆炸品设计安全技术规程
- 食用玫瑰生产技术规程
- 科学用脑与高效学习课件
- 江苏省南京九中2023-2024高一上学期期中物理试卷及答案
- 高考说题英语说题比赛课件
- 2024届孝感市八校联谊化学九上期中监测试题含解析
- 水产品中内在危害物与检验
- 钢结构焊接质量检验记录表
评论
0/150
提交评论