欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第6章运算符重载、虚函数与多态性.ppt

    • 资源ID:70035524       资源大小:140.51KB        全文页数:19页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第6章运算符重载、虚函数与多态性.ppt

    C+语言与应用基础第 5 章 运算符重载、虚函数与多态性【本章内容】1.运算符重载的基本概念和运算符重载的规则,及运算符重载为成员函数与友员函数。2.虚函数的基本概念及虚函数在C+语言中的应用。3.多态性的概念,静态多态性与动态多态性的意义及其在C+程序设计中的应用。4.纯虚函数与抽象类的基本概念,纯虚函数与抽象类在派生类编程中的应用。5.多态性编程应用举例。制作 张超英C+语言与应用基础$6.1 多态性概述多态性是考虑类与类层次关系以及类自身内部特定成员函数之间的关系问题,是解决功能和行为的再抽象问题。【多态性】多态性,就是不同对象收到相同的消息产生不同的动作。C+中多态性的实现与联编概念有关。联编:一个程序经过编译、连接,成为可执行文件的过程(把可执行代码联编在一起的过程)。静态联编:在运行之前就完成的联编。-调用速度快,执行效率高,要求编译时就知道调用函数的全部信息。静态联编支持的多态性称为编译时多态性(静态多态性)。动态联编:系统在运行时动态实现某一动作。-更灵活、问题抽象性和程序易维护性。动态联编支持的多态性称为运行时多态性(动态多态性)。通过继承和虚函数来实现。制作 张超英C+语言与应用基础$6.2 运算符重载运算符重载是对于已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。运算符重载的实质就是函数重载。实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转换为运算符函数的实参,然后根据实参的类型确定需要调用的函数,这个过程是在编译过程中完成的。【运算符重载的规则】1.C+中的运算符出除了少数几个外,全部可以重载,且只能重载已有的这些运算符,见表6.1。制作 张超英C+语言与应用基础$6.2 运算符重载2.重载之后运算符的优先级和结合性都不改变。3.运算符重载是针对新类型数据的实际需要,对原有运算符进行改造,重载的功能应当与原有功能类似,不能改变原有运算符的操作对象个数,同时至少有一个操作对象是自定义类型。运算符重载为成员函数的一般形式:函数类型 operator 运算符(形参表)函数体;运算符重载为类的友元函数:friend 函数类型 operator 运算符(形参表)函数体;制作 张超英C+语言与应用基础$6.2 运算符重载“函数类型”是重载运算符的返回值类型,“operator”是定义运算符重载函数的关键字,运算符给定了要重载的运算符。形参表中给出运算符所需的参数和类型。当运算符重载为类的成员函数时,参数个数比原操作数个数少一个(后置+,-除外);当重载为类的友元函数时,参数个数与原操作数个数相同。【运算符重载为成员函数】运算符重载实质上就是函数重载,如果重载为成员函数,它就可以自由地访问本类的数据成员,实际使用时,总是通过该类的某个对象来访问重载的运算符。制作 张超英C+语言与应用基础$6.2 运算符重载如果是双目运算符,一个操作数是对象本身的数据,由this指针给出,另一个操作数则通过运算符重载的参数表进行传递,如果是单目运算符,操作数由对象的this指针给出,无参数。见表6.2所示。见P156 例6.1。【运算符重载为友元函数】运算符重载为类的友元函数,它不可以自由地访问该类的任何数据成员,运算符需要的操作数都需要通过函数的形参来传递,在形参中形参从左到右的顺序就是运算符操作数的顺序。等价的函数调用见:P159 表6.2。例见:P159 例6.2。制作 张超英C+语言与应用基础$6.2 运算符重载【成员运算符函数与友元运算符函数比较】1.对双目运算符而言,成员函数带有一个参数,而友元运算符函数带有两个参数;对于单目运算符,成员运算符函数不带参数,而友元运算符函数带一个参数。2.双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但有时必须重载为友元运算符函数。(见:P161)3.成员运算符函数和友元运算符函数都可以用惯用表示方式调用,也可以用专用的方式调用。(表6.1和6.2)4.C+的大部分运算符既可说明为成员运算符函数,也可说明为友元运算符函数。制作 张超英C+语言与应用基础$6.2 运算符重载对于双目运算符,重载为一个友元运算符函数比重载为成员运算符函数便于使用,若一个运算符的操作需要修改类对象的状态,则选择成员运算符函数较好,如果运算符所需的操作(尤其是第一个操作数)希望有隐式类型转换,则运算符重载必须用友元函数,而不能用成员函数。【”+”和”-”运算符的重载】运算符“+”和“-”可以是前置或后置运算符,都可以用运算符函数重载。对于前置方式“+a”,重载为成员函数:a.operator+(),重载为友元函数:operator+(a);对于后置方式(a+),重载为成员函数:operator+(int),重载为友元函数:operator+(a,int)。例6.3,6.4制作 张超英C+语言与应用基础$6.2 运算符的重载【下标运算符“”的重载】在重载“”时,C+也把它看成双目运算符,其操作数为“数组名”和“下标表达式”,相应的运算符为operator。下标运算符重载只能使用成员函数,其形式:类型 类名:operator(形参)函数体;形参只能有一个。见:例6.5。【函数调用运算符”()”的重载】函数调用运算符可以带零个或多个参数。例见:P165 例6.6【应用举例】运算符重载的实例:P166 例6.7,6.8。制作 张超英C+语言与应用基础$6.3 虚函数制作 张超英虚函数是重载的另一种表现形式。这是一种动态的重载方式,它提供了一种更为灵活的多态性机制。虚函数允许函数调用与函数体之间的联系在运行时才建立,是动态联编。【派生类与基类的转换】在继承关系下,派生类的对象可以直接赋值给其public基类的对象而不需经过任何转换,C+允许这样的赋值法是因为每一个派生类对象都含有一个public基类的对象。相反,若将一基类的对象赋值给派生类对象,必须使用强制类型转换方式来实现,但这样使用是危险的,因为赋值所得的派生类对象只含有基类的数据,若调用其新定义的成员,则将发生危险。C+语言与应用基础$6.3 虚函数制作 张超英派生类对象的引用和指针也可以直接赋值给其指向public基类对象的引用和指针变量。如果希望用指向基类的指针访问其公有派生类对象的特定成员,必须将基类指针用强制类型转换方式转换为派生类的指针。例见:P175。【虚函数】在继承体系中,如果在派生类中要对所继承的成员函数重新定义其功能时,该函数应在基类中被定义为虚函数,即在成员函数定义时在其前面加上关键字virtual。虚函数是一种单界面多实现版本的方法,即函数名、返回类型、参数类型和个数及顺序完全相同,但函数体内容可以完全不同。C+语言与应用基础$6.3 虚函数制作 张超英如果在派生类中重定义了一个与基类中成员函数同名的成员函数,则基类的成员函数将被隐藏起来,但它仍然存在,且可以通过基类名和作用域运算符来使用。如果采用指向对象的指针(或引用)来调用,则指向基类的指针永远只能调用属于基类的成员函数,而指向派生类的指针永远只能调用属于派生类自己的成员。例见:P176。能否用一个指向基类的指针变量,通过赋给它的对象地址的改变,达到同一个调用语句实现不同版本的函数的调用?C+通过虚函数的概念达到了此目的,加上virtual后,基类成员函数的版本在派生类中就不再存在了,在派生类中就只有一个成员函数的版本。C+语言与应用基础$6.3 虚函数制作 张超英当把派生类对象的地址赋给指向基类的指针(或引用)变量时,用指向基类的指针变量来调用虚函数,则执行的就是派生类自己的函数版本。在继承体系下,用虚函数实现运行时多态性的关键:1.在基类定义中,必须把成员函数定义为虚函数;2.在派生类定义中,对虚函数的重定义只能修改函数体内容,函数名、返回类型、参数个数与类型、参数顺序不变;3.必须用指向基类的指针(或引用)访问虚函数。C+语言与应用基础$6.3 虚函数制作 张超英尽管可以像调用其他成员函数那样显式地用对象名来调用一个虚函数,但只有在同一个指向基类的指针访问虚函数时,运行时多态性才能实现。例见:P178、P179。关于虚函数的几点总结:(1)在基类中用关键字virtual可以将其public或protected部分的成员函数声明为虚函数。(2)在派生类对基类中声明的虚函数进行重新定义时,关键字virtual可写也可不写。(3)虚函数被重新定义时,其函数的原型与基类中的函数的原型必须相同。(4)定义了虚函数后,在main()中声明的指向基类的指针ptr允许指向其派生类。在执行的过程C+语言与应用基础$6.3 虚函数制作 张超英中,不断改变它所指向的对象,就能调用到不同的版本。(5)虽然使用对象名和点运算符的方式可以调用虚函数,但这种调用是在编译时进行的静态联编,它没有充分利用虚函数的特性。(6)一个虚函数无论被公有继承多少次,它仍保持其虚函数的特性。(7)虚函数必须是其所在类的成员函数,而不能是友元函数,也不能是静态成员函数,因为虚函数调用要靠特定的对象来决定该激活哪个函数,但是,虚函数可以在另一个类中被声明为友元函数。(8)构造函数不能是虚函数,但析构函数可以是虚函数。C+语言与应用基础$6.4 纯虚函数和抽象类制作 张超英【纯虚函数】纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需要定义自己的版本,纯虚函数声明格式:virtual 函数类型 函数名(参数表)=0;C+中有一种情况是空的虚函数,空的虚函数是指函数体为空的虚函数,它不是纯虚函数。【抽象类】带有纯虚函数的类是抽象类。抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态性。例见:P182 例6.9。C+语言与应用基础$6.4 纯虚函数和抽象类制作 张超英对于抽象类的使用的几点规定:1.由于抽象类中至少包含有一个没有定义功能的纯虚函数,因此抽象类只能用作其他类的基类,不能建立抽象类的对象(不能实例化)。2.抽象类不能用作参数类型、函数返回类型或显式转换的类型。但可以声明指向抽象类的指针或引用,此指针可以指向派生类,进而实现多态性。例见:P183。3.如果在抽象类的派生类中没有新说明纯虚函数,而派生类只是继承了基类的纯虚函数,则这个类仍然是一个抽象类。C+语言与应用基础$6.5 程序应用实例制作 张超英1.例6.10 人员信息管理(P183)交互式的实现校园人员信息的录入与显示。2.例6.11 纯虚函数应用举例(P191)C+语言与应用基础作 业制作 张超英P195:第 1、2、3 题 P195:第 4、5、题

    注意事项

    本文(第6章运算符重载、虚函数与多态性.ppt)为本站会员(飞****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开