C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx

C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx

ID:51777224

大小:495.40 KB

页数:33页

时间:2020-03-07

C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx_第1页
C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx_第2页
C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx_第3页
C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx_第4页
C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx_第5页
资源描述:

《C++程序设计与实践 教学课件 作者 白忠建chapter09 虚函数和多态性.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C++程序设计与实践第九章虚函数和多态性电子科技大学信息与软件工程学院白忠建第九章虚函数和多态性本章要点多态性的概念。多态性是指一种界面,多种实现。多态性分为静态多态性和动态多态性。虚函数。函数重载是静态多态性的具体示例,虚函数是动态多态性的具体示例。纯虚函数和抽象类。纯虚函数是在基类中说明的虚函数,在基类中没有定义,要求任何派生类都必须定义自己的版本。如果一个类至少有一个纯虚函数,则该类称为抽象类。9.1问题引入在完成了第八章中的所有类型设计和编码后,可以编写了这样的测试代码:期望得到如下输出:Parallelogram:area=35Re

2、ctangle:area=72Diamond:area=15Square:area=49intmain(){Parallelogrampara("Parallelogram",5,7);Rectanglerect("Rectangle",6,12);Diamonddiam("Diamond",3,5);Squaresqr("Square",7);Listlist;list+=¶list+=▭list+=⋄list+=&sqr;list.traverse(access);return0;}voidaccess(QU

3、ADPTRquad){cout<what()<<":area="<area()<

4、先类指针指向这个对象的情况。通过指针quad去观察rect,其占据的内存块会被重解释:quad认为自己指向的只是一个Quadrangle对象,而其余部分对这个指针来说是没有意义的。正是这个原因,通过quad调用的area()函数就一定是Quadrangle类自己的,而非某一个后代的。即使将指针换成引用,其结果也是一样的。难道我们非得在access()中用一大段的if…elseif语句来判断形体的真正类型吗?9.2多态性的概念答案当然是否定的。C++提供了完整的解决方案来处理这种需要更大的编码灵活性的场合,这就是多态性(polymorphism

5、)。简而言之,多态性指的是一个接口,多种实现。这就意味着,类对象在不同的状态下,执行相同的接口,却可能有不同的结果。这赋予了程序员控制复杂程序的灵活性。在C++中,多态有静态和动态两种之分,且都是通过函数重载实现的。9.2多态性的概念答案当然是否定的。C++提供了完整的解决方案来处理这种需要更大的编码灵活性的场合,这就是多态性(polymorphism)。简而言之,多态性指的是一个接口,多种实现。这就意味着,类对象在不同的状态下,执行相同的接口,却可能有不同的结果。这赋予了程序员控制复杂程序的灵活性。在C++中,多态有静态和动态两种之分,且都

6、是通过函数重载实现的。9.2多态性的概念9.2.1静态多态性静态多态性的实现是在编译时完成的。普通的函数重载(包括运算符函数重载)就是典型的例子。voidf();voidf(intx);voidf(doublex);voidf(intx,inty);这些声明充分体现了多态的一个原则:一个接口(名字),多个实现。9.2多态性的概念在继承树上,静态多态性也能得到体现。考虑前一章我们设计的各种形体类,如果有对象定义:Trapezoidt(30,40,20);t.area();虽然Trapezoid类继承了其基类Quadrangle的area()成员

7、(也就是说,它内部有两个原型完全一样的成员),但是在上述语境中,编译器在处理成员函数调用t.area()时,将会直接在Trapezoid的作用域中查找名字area,并且成功找到,那么就一定会调用Trapezoid类自己的成员函数,得到正确结果350,而不是调用基类的同名函数得到结果-1。在编译时就确定下来多态的称为“静态多态性(早期匹配)”。9.2多态性的概念9.2.2动态多态性静态多态性能够在一定程度上给程序设计带来灵活性,但它只覆盖了编译阶段的多态情况,而对更灵活的要求,例如运行时多态,却无能为力。以access()函数为例,该函数试图通

8、过一种统一的方式来求不同形体的面积,从而避免代码的冗余。然而,得到的结果却是不正确的。9.2多态性的概念产生错误的原因在前面已经提到过。这里再深入一点进行探讨。可以

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

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

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