C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt

C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt

ID:50318775

大小:1.47 MB

页数:31页

时间:2020-03-08

C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt_第1页
C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt_第2页
C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt_第3页
C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt_第4页
C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt_第5页
资源描述:

《C++教程教学课件 作者 郑莉 李宁 10_多态性.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十章多态性清华大学郑莉学习目标掌握多态性的概念、虚函数的声明与定义;掌握虚函数的多态调用机制;掌握纯虚函数与抽象类。2目录10.1多态性概述10.2虚函数10.2.1函数的覆盖10.2.2虚函数成员10.2.3虚析构函数10.3抽象类310.1多态性概述多态是指操作接口具有表现多种形态的能力,即能根据操作环境的不同采用不同的处理方式。多态性是面向对象系统的主要特性之一,在这样的系统中,一组具有相同基本语义的方法能在同一接口下为不同的对象服务。C++不但提供了固有的多态性,还提供了实现自定义多态性的手段。C++语言支持的多态性可以按其实

2、现的时机分为编译时多态和运行时多态两类。410.2.1函数的覆盖C++中引入了虚函数的机制在派生类中可以对基类中的成员函数进行覆盖(重定义)。虚函数的声明Virtual函数类型函数名(形参表){函数体}510.2虚函数例10-1:继承形状类Shape派生得到Circle和Rentangle#includeusingnamespacestd;classShape{public:doublex,y;virtualvoidarea(){}};classCircle:publicShape{public:doubler;Ci

3、rcle(doubleradius){r=radius;}voidarea(){cout<<"areaofcircle:"<<3.14*r*r<

4、0.0);Rentanglerec(3.0,5.0);Shape*p=○Shape&q=rec;p->area();q.area();return0;}710.2虚函数——10.2.1函数的覆盖例10-1(续)运行结果:areaofcircle:314areaofrectangle:1510.2虚函数——10.2.1函数的覆盖例10-1(续)810.2.2虚函数成员根据类型兼容性规则,一个基类指针(或引用)可以用于指向它的子类型对象。通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际指向的对象类的那个重定义版本

5、。类中的其他成员函数也可以调用虚函数,这是通过指针调用虚函数的一种特殊情况:即通过this指针来调用虚函数,只不过在调用格式中一般都省略前缀this->。构造函数不能声明为虚函数。910.2虚函数10.2.2虚函数成员(续)成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。使用时应该注意两点:virtual只能用于类体中,不能用在类体外的虚函数的实现代码中。虚函数不得是静态函数。派生类中重定义虚函数时,无论是否用virtual修饰都还是虚函数。最好还是保留virtual修饰,以增强程序的可读性。1010.2虚函数例10-

6、2:设计整数集合类IntSet,并派生出整数有序集合类IntOrderedSet,通过在派生类中重定义基类的虚函数,使得这两个类的特性既有所不同,又能保持相同的接口。1110.2虚函数——10.2.2虚函数成员//IntSet.h#includeusingnamespacestd;classIntSet{protected:int*element;intcount;intcapacity;public:IntSet(intcapacity=100,intarray[]=NULL,intcount=0);~IntSet

7、(){delete[]element;}intgetCount()const{returncount;}intgetCapacity()const{returncapacity;}intisEmpty()const{returncount==0;}virtualboolisInSet(intelem);virtualvoidadd(intelem);virtualvoidremove(intelem);intget(intindex)const;};例10-2(续)1210.2虚函数——10.2.2虚函数成员classIntOrdere

8、dSet:publicIntSet{public:IntOrderedSet(intcapacity=100,intarray[]=NULL,intcount=0);virtualboolisInSet(i

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

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

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