实验四、多态性与虚函数
一、实验目的
通过本次实验使学生掌握C++中多态与虚函数的概念,了解多态性在C++中的重要意义,掌握虚函数、纯虚函数以及抽象类在程序中的作用,并掌握编程方法。
二、实验内容
题1( 6-1) 在例6.1程序基础上作一些修改。定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。 (1)编程要求
程序要求用多文件结构来完成。
(2)思考题
1)什么是多态性?为什么说它是面向对象程序设计的一个重要机制?
答:多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函
数名调用不同内容的函数。 因为C++程序设计中能够实现多态性,并可以设计和实现一个易于扩展的系统。
2)在你编写的程序中是否存在多态性的问题?如何去理解多态性的问题?
答:存在。例如在Cylinder类中定义了area函数,它与Circle类中的area函数同名。多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。使程序变得简单了,增加了其可操作性。
题2(6-4) 写一个程序,定义抽象基类Shape,由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。 (1)编程要求
程序要求用多文件结构来完成。
(2) 思考题
1)该程序利用了虚函数?为什么要定义虚函数?它与动态联编有何关系?
答: 利用了。在同一类中不能定义两个名字,参数,类型都相同的函数,否则就
是重复定义,虽然在类的继承层次结构中可以出现,但不是很方便。而虚函数允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
2)根据程序说明什么是纯虚函数?抽象类在程序中起什么作用?
答: 虚函数就是在声明虚函数时被“初始化”为0的函数。
作用:作为一个类族的共同基类,或者说,为一个类族提供一个公共接口。
实验中的问题:
1. 单独构成文件时,文件名和主函数不一致,造成编译错误;由于程序很长,在编写
时总是缺少一些标点,括号等。
2. 在规定字符类型时忽略了其一致性。实验中float与double类型的强制转换。
小结:
将一个程序分成多个文件,方便了程序编译,可以多次重复调用,节省时间。