实验9 多态与虚函数.docVIP

  • 12
  • 0
  • 约4.51千字
  • 约 6页
  • 2019-09-10 发布于山西
  • 举报
宁夏师范学院数学与计算机科学学院 《面向对象程序设计(C++)》实验报告 实验序号: 9          实验项目名称:多态与虚函数 学  号 姓  名 专业班级 2013级计算机科学与技术 实验地点 指导教师 时 间 2014.6.5 一、实验目的及要求 1、理解多态性,函数重载、虚函数的相关概念; 2、掌握虚函数的定义方式和实现,能够根据要求正确使用虚函数; 3、理解静态关联编和动态关编的概念,加深对如何实现动态联编的了解。 4、掌握纯虚函数和抽象类的概念; 5、通过上机练习进一步体会抽象类的作用,以及如何使用抽象类。 二、实验设备(环境)及要求 硬件:PC(P = 2 \* ROMAN II以上,128M以上内存)、因特网接入; 软件:Windows XP操作系统或更高版本、Office2003或更高版本、Visual C++6.0。 实验学时:2学时 其他要求:完成验证题目和设计题目并写实验报告。 三、实验内容与步骤 说明:对下述实验内容给出实验结果并分析总结。 【验证题目】 1.分析下面的程序,写出其运行时的输出结果。 #include iostream using namespace std; class Chuzhong { public: Chuzhong(double x,double y):x1(x),y1(y){} virtual double sum() { double score; score=x1+y1; return score; } protected: double x1,y1; }; class Gaozhong :public Chuzhong { public: Gaozhong(double x,double y,double z):Chuzhong(x,y),z1(z){} virtual double sum() { double score; score=x1+y1+z1; return score; } protected: double z1; }; void fn(Chuzhong chu) { coutchu.sum()endl; } void main() { Chuzhong cz(85.5,95.5); Gaozhong gz(75.5,78.5,80.5); fn(cz); fn(gz); } 2.按下列要求编程,并上机调试。 某学校教授和讲师的月工资计算办法规定如下: 教授每月工资固定为4000元。 讲师每月工资与讲课学时数有关,计算方法是每学时50元,另加补助1000元。 参考程序如下: 运行该程序,根据输出结果分析该程序的特点。 本例应用了虚函数,就是在基类声明函数是虚拟的,并不是实际存在的,然后再派生类中才正式定义此函数,用指针指向某一派生类对象,这样就能调用指针指向的派生类对象中的函数,而不会调研其他派生类中的函数。通过虚函数与基类对象的指针变量的配合使用,能实现动态的多态性。 3.上机调试教材中例12.3中的程序。通过调试该程序,请回答下述问题: (1)构造函数中能调用虚函数采用动态联编吗? (2)成员函数中调用虚函数时,何时采用动态联编? (3)在什么情况下需要将析构函数声明为虚函数? #includeiostream using namespace std; class Point {public: Point(){} ~Point(){coutexecuting Point destructorendl;} }; class Circle:public Point {public: Circle(){} ~Circle(){coutexecuting Ciecle destructorendl;} private: int radus; }; int main() {Point*p=new Circle; delete p; return 0; } 答:(1)构造函数中能调用虚函数采用动态联编 (2)当基类的析构函数为虚函数时,无论指针指的是哪一类族中的哪一个类对象,系统都会采用动态关联,调用相应类的析构函数。 (3)在基类声明函数是虚拟的,并不是实际存在的,然后再派生类中才正式定义此函数,用指针指向某一派生类对象,这样就能调用指针指向的派生类对象中的函数,而不会调研其他派生类中的函数。 【设计题目】 教材P414习题12.5 #include iostream using namespace std; //定义抽象基类Shape class Shape {

文档评论(0)

1亿VIP精品文档

相关文档