实验五 虚函数与多态性
一、实验目的与要求
(1) 学习虚函数和纯虚函数的定义与使用方式。
(2) 理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。
(3) 掌握抽象类的定义与使用方式,并注意指针的用法。
(4) 学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。
二、实验设备与平台
实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统。
三、实验内容与步骤
实验1、虚函数的简单使用。
# include class base { public: virtual void fh() {cout << \"In base class \\n \" ; } }; class subclass: public base { public: virtual void fn() { cout << \"In subclass \\n \" ; } }; void test( base &b) { b.fh(); } void main( ) { base be; subclass sc; cout << \" Calling test(bc) \\n\" ; test(be); cout << \"Calling test(sc) \\n \" ; test(sc); } 实验2、用抽象类实现的菜单程序。 #include < iostream.h > class Menu { public: virtual void action ( ) = 0; }; class item1: public Menu { public: virtual void action () {cout<< \"新建文件\" << endl;} }; class item2: public Menu {public : virtual void action ( ) {cout<< \"打开文件 \" << endl;} }; class item3: public Menu {public: virtual void action ( ) {cout << \"保存文件\" < class item4: public Menu {public: virtual void action() {cout << \"关闭文件\" << endl;} }; void main() { int select; Menu * Fptr[4]; Fptr[0] = new item1; Fptr[1] = new item2; Fptr[2] = new item3; Fptr[3] = new item4; do { cout << \" 1 new file \" << endl; cout << \" 2 open file \" << endl; cout << \" 3 save file \" << endl; cout << \"4 close file \" << endl; cout << \"0 exit \" << endl; cin >> select; if( select >= 1 && select <= 4) Fptr[select-1]->action(); }while( select!= 0 ) ; for ( int i = 0 ; i <= 3 ; i++ ) { delete Fptr[i]; } } 实验3:定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基 container类,在其中定义表面积和体积的纯虚函数,在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。 分析: 定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。 定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。 定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。 实验4:编写一个人员信息管理系统。这个系统的功能是:交互式的实现校园人员信息的录入与显示。 分析: 学校里,主要有四类人员:大学本科学生、教师、研究生和助教。 大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教生除了上课外,还要做研究和一定的教学工作。 人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。各个人员之间的关系: people类派生出student 类和teacher类,student 类派生出graduate类, graduate类和teacher类派生出TA类。 以下给出部分程序: #include \"stdafx.h\" #include < iostream.h > class people { public: //添加程序 private: }; class student: virtual public people { public: //添加程序 private: }; class teacher:virtual public people { public: //添加程序 private: }; class graduate: virtual public student { public: //添加程序 private: }; class TA : public graduate, public teacher { public: //添加程序 private: }; void main() { //添加程序 } 因篇幅问题不能全部显示,请点此查看更多更全内容