第五章多态性和虚函数

第五章多态性和虚函数

ID:14709667

大小:431.00 KB

页数:54页

时间:2018-07-30

第五章多态性和虚函数_第1页
第五章多态性和虚函数_第2页
第五章多态性和虚函数_第3页
第五章多态性和虚函数_第4页
第五章多态性和虚函数_第5页
资源描述:

《第五章多态性和虚函数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第五章多态性和虚函数5.1多态性(polymorphism)的定义(一)定义:多态性-能够呈现不同形态的特性或状态。polymorphism-thequalityorstateofbeingabletoassumedifferentforms。(摘自Webster词典)(二)两种多态性1.编译时的多态性:亦称静态联编(束定)(staticbinding)或早期联编(earlybinding)。即本章中前半部分将要讲述的函数和运算符[函数]的重载功能。编译系统进行编译时在函数调用指令表中找到多个重载的

2、函数中相对应的那个函数(即形参的数量和类型完全匹配的那个函数),将它们与主程序中调用它们的代码联编(binding),以供主程序运行时正确地调用。在C++中这表现为“行为共享”(例如同名函数实现不同功能),或称“同一接口,多种方法”。2.所谓运行时的多态性:亦称所谓动态联编(束定)(dynamicbinding)或滞后联编(latebinding)。编译系统进行编译时,根据程序代码内容、根据虚函数地址表中this指针所指向的地址、找到相应的虚函数,将它与主程序中调用它的代码联编(binding),以

3、供主程序在运行中调用它(本章后半部分将详细讲解,它实质上仍然是静态联编)。5.2函数重载(overloading)5.2.1普通函数的重载C语言中一个函数只能处理一个类型的数据,或者只能处理整型数据,或者只能处理浮点型数据。不可能兼顾两种或多种数据类型。能否使用同一名称的函数来处理多个类型的数据?这可以在面向对象程序设计语言中解决。在C++中可用一个名称的函数例如sq(…)来处理所有参数类型的平方,例子如下。[例1]平方函数的重载:两个单形参的重载函数//overld_fun1.cpp//overl

4、oadingoffunctions#includedoublesq(doubley){returny*y;}intsq(inty){returny*y;}voidmain(){inti=5;doubled=5.5;std::cout<

5、行编译时,系统找到参数列表完全相同的那个函数,将其与主函数的调用语句联编起来,达到运算目的。[例2]求最大值函数的重载:三个双形参的重载函数//overld_fun2.cpp//overloadedfunctionfordeterminingmaxvalue#include#includeintmax(intx,inty){returnx>y?x:y;}doublemax(doublex,doubley){returnx>y?x:y;}char*max(char*

6、x,char*y){returnstrcmp(x,y)>0?x:y;}voidmain(){std::cout<

7、eturntypeisnotenough#includeintfun(inty){returny;}voidfun(inty){++y;}//error:'voidfun(int)':overloadedfunctiondiffers//onlybyreturntypefrom'intfun(int)'//error:'fun':redefinition;differentbasictypesvoidmain(){inti=5;std::cout<

8、dl;}/*Notworking!*/以上例子中,两个重载的普通函数只有返回值不同,而其参数列表却都相同,这不满足重载条件,将引起二义性,出现编译错误。这是因为系统完全根据函数的参数表来选择重载函数中相应函数的。5.2.2构造函数的重载任何函数都能重载,构造函数也不例外,而且有时必须重载。现看几个例子。[例1]输入不同格式时间值的重载构造函数//overld_cons_1.cpp//overloadedconstructor//copiedfromang'sbook,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。