工信版(中职)编程语言基础------C++模块9教学课件

2022-10-26
| 51页
| 85人阅读
| 0人下载
普通

内容正文:

YCF (中职)编程语言基础------C++模块9教学课件 1 模块9多态与虚函数 任务1多态概述 任务2静态联编与动态联编 任务3虚函数 返回 任务1多态概述 9. 1 .1 多态的概念 多态就是通过类的继承,使得同一个函数可以根据调用它的对象的类型不同作出不同的响应。它与继承和重载共同构成了面向对象的三大编程特性。 多态是通过虚函数来实现的,虚函数的使用本质就是将派生类类型的指针赋给基类类型的指针,虚函数被调用时会动态的判断调用对象的类型,从而给出相应的响应。 9. 1. 2多态的应用 下面通过一个例子来说明关于多态的应用。 下一页 返回 任务1多态概述 【例9一1】设计车辆类Vehicle,提供成员函数drive表示开车,定义drive为纯虚函数;派生轿车Car类,提供成员函数drive表示开轿车;派生卡车Truck类,提供成员函数drive表示开卡车;Car类和Truck类都继承Vehicle类。Vehicle类提供一个纯虚函数drive:表示开车。 定义Vehicle类,成员函数drive()为纯虚函数。 上一页 下一页 返回 任务1多态概述 上一页 下一页 返回 任务1多态概述 上一页 下一页 返回 任务1多态概述 实例化一个Car类的对象和一个Truck类的对象,先各自调用各自的drive()函数,然后将Car类和Truck类对象的指针分别赋给一个指向Vehicle类的指针,再次调用driver()函数,比较结果。 上一页 下一页 返回 任务1多态概述 上一页 下一页 返回 任务1多态概述 运行结果为: 启动轿车! 启动卡车! -------------------------------------- 启动轿车! 启动卡车! 观察函数dirver,就会发现它并没有对传递来的参数进行判断,而是直接调用成员函数drive,至于是哪个类的成员函数,则是在执行程序的时候确定的。下一次如果又添加了继承Vel"llC;le类的新的子类,函数drive:一也不需要更改,只要新的继承子类重写了drive函数,drive:就可以调用到它。 上一页 返回 任务2静态联编与动态联编 在C++中,多态性主要是通过函数重载实现的。重载函数是指程序中对同名函数进行调用时,编译器会根据函数参数的类型和个数,决定该调用哪一段函数代码来处理这个函数调用。这种把函数调用与适当的函数代码相对应的动作,叫做联编(binding) 联编分为静态联编和动态联编。在编译阶段决定执行哪个同名的被调用函数,这称为静态联编。而在编译阶段不能决定执行哪个同名的被调用函数,只在执行阶段才能依据要处理的对象类型来决定执行哪个类的成员函数,这叫动态联编。 下一页 返回 任务2静态联编与动态联编 多态性一也分为静态和动态两种。静态多态性是指定义在一个类或一个函数中的同名函数,它们可根据参数表(类型及个数)区别,并通过静态联编实现,例如在一个类中定义的不同参数的构造函数以及运算符重载等,这些内容在前面都有介绍。动态多态性是指定义在一个类层次的不同类中的重载函数,它们一般具有相同的参数表,因而要根据指针指向的对象所在类来区别,它通过动态联编实现。 为了进一步讲述静态联编和动态联编的区别,我们通过一个例子说明。 上一页 下一页 返回 任务2静态联编与动态联编 【例9 -2】以下程序用于计算并显示大学生和研究生的学费。 上一页 下一页 返回 任务2静态联编与动态联编 上一页 下一页 返回 任务2静态联编与动态联编 上一页 下一页 返回 任务2静态联编与动态联编 上一页 下一页 返回 任务2静态联编与动态联编 上一页 下一页 返回 任务2静态联编与动态联编 上一页 下一页 返回 任务2静态联编与动态联编 上一页 下一页 返回 任务2静态联编与动态联编 本例设计了一个student类,其中的calfee()函数用于输人一个大学生的学号和姓名并计算学费,disp()用于显示大学生的学费。graduate类是从student类派生的,其中的calfee()函数用于输人一个研究生的学号和姓名并计算学费,disp()用于显示研究生的学费。在main()函数中,定义了一个student对象s1和一个graduate对象s2。当调用fn ( s1)函数时,希望输出大学生s1的学费;调用fn ( s2)函数时,希望输出研究生s2的学费。本程序的一次 执行结果如下: 大学生收费 学号:1 上一页 下一页 返回 任务2静态联编与动态联编 娃名:下艳 学费:4800 住宿费:1100 书报费:400 其他:200 点费用:(i500 研究生收费 学县:120 上一页 下一页 返回 任务2静态联编与动态联编 姓名:张军 学费:4

资源预览图

工信版(中职)编程语言基础------C++模块9教学课件
1
工信版(中职)编程语言基础------C++模块9教学课件
2
工信版(中职)编程语言基础------C++模块9教学课件
3
工信版(中职)编程语言基础------C++模块9教学课件
4
工信版(中职)编程语言基础------C++模块9教学课件
5
工信版(中职)编程语言基础------C++模块9教学课件
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。