




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机程序设计,第12章多态性主讲:杨振平E-mail:zpyang,2011-2012第二学期,多态性概述派生类对象替换基类对象虚函数抽象类运算符重载,授课内容,12.1多态性概述,多态性-指对象对“同一消息”,可以选择不同的处理。在C+中,一种方法是通过设置“重载的成员函数”实现。另一种方法,在继承机制中,通过设置“虚函数”来实现。,重载:成员函数的参数有区别,即个数或类型不同。覆盖:成员函数参数完全相同,这时派生类将覆盖基类的同名成员函数。那么:派生类对象.成员函数()-一定访问派生类中覆盖后的同名函数。派生类对象.基类名:成员函数()-可以访问基类中的同名函数。,派生类对基类成员函数的重载与覆盖,类中成员函数的重载,例:“兔子逃生”,伪代码描述如下:class兔子public:void逃生(老鹰a)“兔子蹬鹰”;void逃生(狼b)“动如脱兔”;,intmain()兔子x;if(rand()%2=0)x.逃生(老鹰对象);elsex.逃生(狼对象);,派生类中覆盖基类的成员函数,class宠物public:voidspeak()cout“HowdoesaPetspeak?;class猫:public宠物public:voidspeak()coutmiao!miao!;class狗:public宠物public:voidspeak()coutwang!wang!;,派生类对象替换基类对象的原则C+规定,凡是基类对象出现的场合都可以用其公有派生类对象进行替换,这时派生类对象起到基类对象的作用。派生类对象替换基类对象常见的形式派生类对象给基类对象赋值派生类对象可以初始化基类对象的引用派生类对象的地址传递给基类的指针变量,12.2派生类对象替换基类对象,例12-1:分析如下程序的运行结果,多态性的两种处理技术,静态联编技术-实现编译时多态性在编译时确定调用哪一个同名函数的一种技术。如:函数重载动态联编技术-实现运行时多态性在运行时确定调用哪一个同名函数的一种技术如:继承机制中的虚函数,原因:系统采用静态联编处理技术,12.3虚函数,使用“虚函数”,可以解决“通过基类指针访问派生类对象中“覆盖”的成员函数。方法:只需将基类中与派生类覆盖的同名成员函数定义为虚函数-使用virtual关键字。例如将宠物类Pet中Speak()标记为虚函数:classPet/基类public:virtualvoidSpeak()coutHowdoesapetspeak?endl;,虚函数的定义格式,virtual返回值类型函数名(参数表)函数体,虚函数的作用与用途:虚函数实现“一个接口,多种方法”的理念,即基类内部的虚函数定义该函数的接口形式,而在派生类中对虚函数重新定义,创建一个具体的方法。使用虚函数技术,可实现运行时多态性,即通过基类指针指向公有派生类对象,可以访问派生类中同名覆盖的成员函数。,例12-2虚函数实现运行多态性,例12-2虚函数实现运行多态性,虚函数实现运行多态性时的限制,派生类中重定义虚函数时,必须保证函数名、返回值类型、参数个数、参数类型等应与基类函数一致。必须通过基类指针或引用调用虚函数,才能保证运行时多态性的成立。说明:派生类中重定义的基类虚函数仍为虚函数,同时可以省略virtual关键字。不能定义虚构造函数,可以定义虚析构函数,12.4抽象类,纯虚函数-无函数体的虚函数。纯虚函数的声明格式:virtual返回类型函数名(参数表)=0;抽象类:包含纯虚函数的类。注意:纯虚函数在基类中只作声明,具体实现过程在派生类中完成。,抽象类使用的规则,抽象类不能实例化,即不能创建抽象类的对象抽象类只用作基类被继承能够定义指向抽象类的指针能够定义抽象类的引用,例12-3抽象类与具体类的接口与实现,从几何图形类Point、Circle类中抽象出基类Shape。,classShapepublic:/纯虚函数,在派生类中重载virtualdoubleArea()const=0;/几何图形面积virtualvoidPrintShapeName()const=0;/输出名称virtualvoidPrint()const=0;,纯虚函数,classPoint:publicShapeintx,y;/点的x和y坐标public:Point(int=0,int=0);/构造函数voidSetPoint(int,int);/设置坐标intGetX()returnx;/取x坐标intGetY()returny;/取y坐标;,Point类,virtualdoubleArea()constreturn0.0;virtualvoidPrintShapeName()constcoutPoint:;virtualvoidPrint()const;/输出点的坐标,虚函数的实现,Point:Point(inta,intb)SetPoint(a,b);voidPoint:SetPoint(inta,intb)x=a;y=b;voidPoint:Print()constcoutx,y;,Point类成员函数定义,classCircle:publicPointdoubleradius;public:Circle(intx=0,inty=0,doubler=0.0);voidSetRadius(double);,Circle类,virtualdoubleArea()const;/计算面积virtualvoidPrint()const;/输出圆心坐标和半径virtualvoidPrintShapeName()constcoutCircle:;,虚函数的实现,Circle:Circle(inta,intb,doubler):Point(a,b)SetRadius(r);voidCircle:SetRadius(doubler)radius=r;doubleCircle:Area()constreturn3.14159*radius*radius;voidCircle:Print()constcoutCenter=;Point:Print();cout;Radius=radiusPrintShapeName();,测试函数,12.5运算符重载,运算符重载主要用于对类对象的操作。例如:实现复数类对象的加法运算,c=a+b;,可在复数类中对+和=运算符进行重载。运算符重载函数的定义格式::operator(),说明,对于双目运算符成员函数,只需一个形参,接收右操作数;左操作数通过隐藏的this指针接收。如:a+b相当于a.operator+(b)complexcomplex:operator+(complexc3=c1+c2;coutC3=c3.Real()+ic3.Imag()endl;c3=c3+6.5;coutC3+6.5=c3.Real()+ic3.Imag()endl;return0;,Complex类,12.6const修饰符,const成员函数-强调只使用对象的值,而不修改对象的值。如:classMyClassintx;public:MyClass(inta=0):x(a)intNormalFunc()return+x;intConstFunc()constreturnx+1;,2.const对象只能访问const成员函数如:constMyClassObj(3);inti=Obj.ConstFunc();-正确inti=Obj.NormalFunc();-不正确,12.7静态成员,在类中用static修饰的成员,如:classMyClassintx;staticintcount;/静态数据成员public:staticintsfunc();/静态成员函数;,静态成员使用说明,静态数据成员属于类成员,所有同类对象共享。静态数据成员使用前,必须在类外(文件范围内)定义并进行初始化。静态成员函数没有this指针,因此只能访问类中的静态成员。类中的所有非静态成员函数均可访问静态和非静态的数据成员。,例:统计创建对象的个数,classMyClassintx;staticintcount;public:MyClass(intn=0)x=n;count+;staticintsFunc()returncount;intMyClass:count=0;,intmain()MyClassa7=1,2,3,4,5;MyClass*p=newMyClass();cout程序中共创建“MyClass:sFunc()个对象endl;return0;,第12章实验与作业(P289),1,2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古大学数学试卷
- 奶粉品尝活动方案策划(3篇)
- 米字支撑施工方案(3篇)
- 鹤壁路面开槽施工方案(3篇)
- 感恩业主品牌活动策划方案(3篇)
- 挖碴装车施工方案(3篇)
- 药械知识考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期期中考试道德与法制考题及答案
- 新材料作文题目及答案
- 写好友作文题目及答案
- 2025年电抗器行业当前市场规模及未来五到十年发展趋势报告
- 新班主任自我介绍课件
- 2025年副高卫生职称-公共卫生类-妇女保健(副高)代码:093历年参考题库含答案解析(5卷)
- 2025广西中考英语真题(原卷版)
- 基孔肯雅热防控技术指南2025版培训课件
- 海底捞-A级门店管理制度
- 《陶行知教育名篇》读书笔记(课堂PPT)
- 员工创新奖励办法
- 毛衫各部位基本尺寸测量表示法中英文对照适用毛织厂
- 金沙县光热水气候条件分析.
- TI84 PLUS计算器培训教材
评论
0/150
提交评论