虚函数与多态性PPT.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
虚函数与多态性PPT

说明: 1.多态性是OOP的重要组成部分。 它是C++中的难点之一。C++的多态性是靠虚函数实现的。实际上虚函数使类的成员函数表现出多种形态。 2.虚函数的形式十分简单,要领会其实质则不简单。;本章主要内容;多态性的概念 ;联编 ;静态联编 ;虚函数的声明 ;虚函数的使用 ;例1;接上例;接上例;上述例子实现了一个 whoami() 函数有三种行为,即多态 。;例2;接上例;虚函数的语法总结说明;接上页;接上页;接上页;再接上页;虚函数与重载函数区别;多态形成的过程;C++提供的通过基类指针“自动”访问派生类的方法;一.加标志成员方法;例子;接上例;本例中的 new 说明;纯虚函数 ;抽象基类;特点:;抽象类 ; 抽象类 ;第七节 虚函数应用举例;总体思路;第一步 建立点类;第二步 建立作图的基类;第三步 建立线段类;第四步 建立矩形类;第五步 建立圆类;第六步 建立正方形类(从矩形类派生);第七步 利用定义的类生成对象可以任意多态 作图,见主调函数;接上页;运算符重载---引入;接上;上图例说明;如下例。书写形式很直观、自然。看起来就象基本数据类型的运算一样。;运算符重载 ;运算符重载规则 ;当运算符重载为类的成员函数时,由于单目运算除了对象以外没有其它参数,因此重载“++”和“- -”运算符,不能区分是前缀操作还是后缀操作。C++约定,在参数表中放上一个整型参数,表示后缀运算符。 ;运算符重载为成员函数 ;运算符重载为友元函数 ;对运算符“+”实现有复数功能的运算重载;一.用显式调用成员函数的方法来实现复数类对象的加法操作;主调函数实现;二.用关键字 operator 来实现;主调函数实现;三.两种方法书写格式对比理解;接上;四.单目运算符被重载的例子;接上;上例解释为单目负号运算符的原因;第四节 对运算符重载的说明;一.哪些运算符能重载;二.运算符重载需注意的问题;例如:;接上例; 当在类外定义时,如一个相应类的参数都没有,则是错误的。;(四)类内、外对运算符重载各种情况说明;接上;接上;(五)可同时既在类内、又在类外定义运算符函数。因是在“作用域”范围内,重载是合法的。;接上;(六)不能制造运算符;(七)C++编译器对 “=”、“”、“,”等运算符 作用于 class 类型上已经进行了预定义。;第五节 重载运算符举例;例一.对复数类的“+”运算符重载的进一步完善;将非成员函数重载“+”运算符,并说明为complex 类的友元;以下书写就正确了;例二 complex 类对赋值运算符“=”的重载;有类成员为指针时,用“=”号预定义的含义无法实现 “深拷贝”;对“=”号在字符串类cmessage的重载代码(北航书); 主调函数代码 ;对cmessage 类“=”号的进一步完善;对cmessage 类“=”号函数的修改;以下就主调函数调用正确;深入理解:根据上例的分析,可触类旁通地理解我们用“熟悉”了的,输出流运算符的下列书写格式的道理。;例三 重载逻辑运算符“==”的例子;主调函数;例四 integer 类型的++运算符的重载;主调函数;接上;主调函数;例五.对“[ ]”下标运算符重载;用下标运算符检查越界的错误;主调函数 ;再提复制构造函数;对象初始化与对象赋值的区别;C++中体现“初始化对象”的另外两个情况;复制构造函数用于初始化类对象的上述那些场合。;主调函数;对当类中有成员为指针时的补充说明。;自定义类型转换;一.构造函数实现不同类的转换;为了清晰,下例为将基本类型 double 转换为复数类;主调函数;说明;用于转换的构造函数一旦定???;实际上,转换构造函数还能进行从任何类类型到该类的转换;主调函数;二.转换运算符;主调函数;实际上,转换运算符还能进行从任何类类型到该类的转换;主调函数;三.与C语言对比,正确理解C++格式的强制转换;struct X{ int i; X(int); operator+(int); }; struct Y{ int i; Y(X); operator+(X); operator int(); };;接上;void main() { i+10;//OK调用预定义 y+10;//二义性 y+10*y; //二义性;接上;对complex 重载乘“*”运算符。

文档评论(0)

djdjix + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档