- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 多太性和虚函数 本章内容提要 函数重载 运算符重载 静态联编和动态联编 虚函数 纯虚函数和抽象类 虚析构函数 多态性和虚函数 面向对象的三大特征: 封装性(基础) 继承性(关键) 多态性(补充) C++语言多态性表现: 静态联编 函数重载 运算符重载 动态联编 虚函数 一、 函数重载 是多态性的一种体现 如,汽车都有方向盘,加运算等 函数重载就是赋给同一个函数名多个含义。 重载函数的意义在于可以用相同的函数名访问一组相互关联的函数。 成员函数重载 例10.1: 问题:定义一个string类,对其中的构造函数进行重载。 使用重载函数注意: 不要使用重载函数描述不相干的函数 在类中,构造函数和普通成员函数均可以重载 避免与函数的默认参数产生二义性 二、运算符重载 运算符重载(operate overloading)就是赋予已有的运算符多重含义。 运算符重载实质是函数重载,运算符重载的选择与函数重载类似,会根据运算符的操作数的类型、个数和顺序来进行运算符函数的选择。 使用运算符重载注意: 几乎所有的运算符都可用作重载。除了以下运算符:.* :: ?:。 运算符重载的不变性 优先级不变和结合性不变 操作数个数不变和语法语义不变 运算符重载遵循的原则 重载运算符的含义清楚,并且有实际意义 重载运算符不能有二义性 运算符重载函数的两种形式 C++中每个运算符对应着一个运算符函数。 int a=1,b=2;a+b; 表达式a+b在编译时,将被解释为函数调用形式:operator+(a,b)。其中,operator是一个关键字,它与后面的+共同组成了该运算符函数的函数名。 运算符重载函数的两种形式 形式一:运算符函数重载为类的成员函数 格式: 类型 X::operator @ (参数表) 类型:该运算符函数的返回值类型 X:需要重载该运算符的类名 operator:定义运算符重载函数的关键字 @:需要被重载的运算符与operator共同组成该运算符函数的函数名。 例: 问题:定义一个复数,并重载加法+、-运算符以满足对复数运算的要求。 运算符重载函数的两种形式 形式二:运算符函数重载为类的友元函数 可以定义一个与某一个运算符函数同名的全局函数,然后再将该全局函数声明为类的友元函数,从而实现运算符的重载 格式: friend 类型 operator @ (形参表); 注意:有些运算符不能重载为友元,如=、()、[ ]、- 例: 问题:用友元函数代替成员函数,重新编写上例。 其他运算符重载举例 扩展分数运算符 例10.2 重载取负运算符“-”。 例10.3 重载加法运算符“+”。 例10.4 重载自加运算符“++”。 例10.5 重载类型转换符“long”。 例10.7 重载下标运算符“[]”。 只能被重载为类的非静态成员函数。 下标运算符只有一个参数,表示下标值。 注意:一般说来,单目运算符最好被重载为成员函数,双目运算符最好被重载为友元函数。 三、静态联编和动态联编 联编是计算机程序彼此关联的过程。即,将被调用的函数连接编译到调用它的程序中。 联编有两种: 静态联编:在编译阶段进行联编的,又称早期联编。 动态联编:在运行阶段进行联编的,又称晚期联编。 一般多数都是静态联编,只有满足一定条件时才会实现动态联编。 1.静态联编 在编译时就解决了程序中的操作调用与执行该操作代码间的关系,确定这种关系又被称为束定,在编译时束定又称静态束定。 例10.8: 问题:静态联编的例子。 2.动态联编 动态联编和静态联编也都属于多态性。它们是在不同阶段对不同实现进行不同的选择。如上例。 动态联编是在虚函数的支持下实现的。 动态联编的实现是有条件的: 公有继承是基础; 虚函数是关键; 对象指针或引用作为引导。 四、虚函数 虚函数是动态联编的基础。虚函数是成员函数,而且是非static的成员函数。 虚函数的定义方法: class 类名 {…… virtual 类型 函数名(参数表); }; 注意:动态联编通过对象指针和引用操作虚函数,如果使用对象来操作函数,则使用静态联编。 例10.9: 问题:动态联编的例子。 例10.10: 问题:指针指向虚函数的例子。 虚函数在使用时应注意: 类的成员函数声明为虚函数,意味着该成员函数在派生类中可能有不同的实现。 虚函数可以在一个或多个派生类中被重新定义,但要求函数名、返回值类型和参数类型、顺序等要相同。 只有类的成员函数才能声明为虚函数。 基类的指针可以指向该基类的不同派生类对象,但具体是否使用动态联编,还要看所调用 的是否是虚函数。 五、纯虚函数和抽象类 在基类中只给出说明,而在派生类中给出定义的虚函数称纯虚函数,包含纯虚函数的类叫抽象类。
您可能关注的文档
- PLC第3篇 典型生产机械电气控制系统.ppt
- 2016高考数学总复习课时作业堂堂清直线及圆7-1.ppt
- 2015《金榜e讲堂》高三人教版数学(理)一轮复习课件:第9节 第1节 随机抽样.ppt
- 2014年高一生物复习课件:第二篇 必修1 苏教版.ppt
- micro0003第三篇、效用理论(微观经济学-上财-李建).ppt
- 2014届新课标高考总复习·化学 9-1几种重要烃.ppt
- PLC新技术及新应用介绍.ppt
- 2014届高考数学(文)一轮复习课件:第2章 第4讲幂函数及二次函数.ppt
- Photoshop教程第11篇.ppt
- 2014-2015学年高二化学鲁科版选修一同步课件:4-4 金属制品防护.ppt
- 2013届高考物理核心要点突破系列课件:第19篇第一节《光的直线传播》(人教版选修3-4).ppt
- 2013高考一轮复习优秀课件:第十节电磁感应第三单元 第5课时.ppt
- 2013步步高化学大一轮复习讲义第五节第1讲原子结构.ppt
- 2013版高考数学(人教A版·数学文)全程复习方略配套课件:7.5 直线、平面垂直的判定和其性质.ppt
- 5045流通管理第004节.ppt
- 2013-2014学年高一化学人教版必修二辅导及检测课件 第2章 第2节 第1课时 原电池.ppt
- 2013-2014版高中物理选修1-1(人教版)同步课堂配套课件 2-2电流磁场.ppt
- 2017二轮复习专题-植物激素调节.ppt
- 2012届高考物理二轮复习专项突破讲义:带电粒子在复合场中运动(上)(人教版).ppt
- 2012届高考化学碳硅和其化合物复习.ppt
文档评论(0)