- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++编程思想(中文PDF文字版)5.pdf
下载
第5章 函数重载与缺省参数
能使名字方便使用,是任何程序设计语言的一个重要特征。
当我们创建一个对象(即变量)时,要为这个存储区取一个名字。一个函数就是一个操作
的名字。正是靠系统描述各种各样的名字,我们才能写出易于人们理解和修改的程序。这在很
大程度上就像是写散文——目的是与读者交流。这里就产生了这样一个问题:如何把人类自然
语言的有细微差别的概念映射到编程语言中。通常,自然语言中同一个词可以代表许多种不同
的含义,这要依赖上下文来确定。这就是所谓的一词多义——该词被重载了。这点非常有用,
特别是对于细微的差别。我们可以说“洗衣服,洗汽车”。如果非得说成“洗(洗衣服的洗)
衣服,洗(洗汽车的洗)汽车”,那将是很愚蠢的,就好像听话的人对指定的动作毫无辨别能
力一样。大多数人类语言都是有冗余的,所以即使漏掉了几个词,我们仍然可以知道话的意思。
我们不需要单一的标识—而可以从上下文中理解它的含义。
然而大多数编程语言要求我们为每个函数设定一个唯一的标识符。如果我们想打印三种不
同类型的数据:整型、字符型和实型,我们通常不得不用三个不同的函数名,如 p r i n t _ i n t ( ) 、
p r i n t _ c h a r ( )和p r i n t _ f l o a t ( ) ,这些既增加了我们的编程工作量,也给读者理解程序增加了困难。
在C + + 中,还有另外一个原因需要对函数名重载:构造函数。因为构造函数的名字预先由
类的名字确定,所以只能有一个构造函数名。但如果我们想用几种方法来创建一个对象时该怎
么办呢?例如创建一个类,它可以用标准的方法初始化,也可以从文件中读取信息来初始化,
我们就需要两个构造函数,一个不带参数(缺省构造函数),另一个带一个字符串作为参数,
以表示用于初始化对象的文件的名字。所以函数重载的本质就是允许函数同名。在这种情况下,
构造函数是以不同的参数类型被调用的。
重载不仅对构造函数来说是必须的,对其他函数也提供了很大的方便,包括非成员函数。
另外,函数重载意味着,我们有两个库,它们都有一个同名的函数,只要它们的参数不同就不
会发生冲突。我们将在这一章中详细讨论这些问题。
这一章的主题就是方便地使用函数名。函数重载允许多个函数同名,但还有另一种方法使
函数调用更方便。如果我们想以不同的方法调用同一函数,该怎么办呢?当函数有一个长长的
参数列表,而大多数参数每次调用都一样时,书写这样的函数调用会使人厌烦,程序可读性也
差。C + + 中有一个很通用的作法叫缺省参数。缺省参数就是在用户调用一个函数时没有指定参
数值而由编译器插入参数值的参数。这样 f ( “h e l l o ”) , f ( “h i ”, 1 )和f ( “h o w d y ”, 2 , ‘c ’)可以
用来调用同一函数。它们也可能是调用三个已重载的函数,但当参数列表相同时,我们通常希
望调用同一函数来完成相同的操作。
函数重载和缺省参数实际上并不复杂。当我们学习完本章的时候,我们就会明白什么时候
用到它们,以及编译、连接时它们是怎样实现的。
5.1 范围分解
在第2章中我们介绍了名字范围分解的概念(有时我们用“修饰”这个更通用的术语)。在
下面的代码中:
70 C + +编程思想
下载
void f();
class x {void f();};
类x 内的函数f ()不会与全局的f ()发生冲突,编译器用不同的内部名f ()(全局)和x : : f ( )
(成员函数)来区分两个函数。在第2章中,我们建议在函数名前加类名的方法来命名函数,所
以编译器使用的内部名字可能就是_ f和_ x _ f 。函数名不仅与类名关系密切,而且还跟其他因素
有关。
为什么要这样呢?假设我们重载了两个函数名:
void print(char);
void print(float);
无论这两个函数是某个类的成员函数还是全局函数都无关紧要。如果编译器只使用函数名字的
范围,编译器并不能产生单一的内部标识符,这两种情况下都得用 _ p r i n t 结尾。重载函数虽然
可以让我们有同名的函数,但这些函数的参数列表应该不一样。所以,为了让重载函数正确工
作,编译器要用函数名来区分参数类型
您可能关注的文档
- 2015年质监局部门.doc
- 2016年闽侯县事业单位公开招聘工作人员.doc
- 2017中国智能移动办公市场测评报告.pptx
- 2017全国Ⅱ卷高考理数试题下载_真题答案精编版.docx
- 2017全国Ⅱ卷高考理综试题下载_真题答案精编版.docx
- 2017全国Ⅲ卷高考文数试题下载_真题答案精编版.doc
- 24单元3_1系统总线.ppt
- 25个漂亮的教育网站欣赏 看国外高等教育网站是如何设计的.pdf
- 672 “语文园地”,语文学习的快乐天地.pdf
- Abaqus软件资料集锦.pdf
- 小学科学:ESP8266智能插座电路原理与动手实践研究教学研究课题报告.docx
- 《金融开放浪潮下我国多层次监管体系构建与创新研究》教学研究课题报告.docx
- 区域教育质量监测中人工智能应用的数据质量分析与优化策略教学研究课题报告.docx
- 《金融科技监管中的数据治理与合规性要求》教学研究课题报告.docx
- 《3D打印技术在航空航天领域中的多材料制造与复合材料应用》教学研究课题报告.docx
- 《绿色金融发展中的政府职能与市场机制研究》教学研究课题报告.docx
- 《植物工厂多层立体栽培光环境调控技术对植物生长发育节律的调控机制探讨》教学研究课题报告.docx
- 销售团队年度业绩总结.docx
- 银行风险管理与金融危机防范.docx
- 银行网络攻击预警与快速响应机制.docx
文档评论(0)