版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生实验报告开课实验室: 2011 年 4 月 16 日学院年级、专业、班姓名学号实验课程名称面向对象程序设计成绩实验项目名称继承与多态性指导老师一、 实验目的1、掌握继承、基类和派生类的概念。2、掌握初始化基类成员的方法。3、 掌握派生类对基类的继承。4、 学习虚函数和纯虚函数的定义与使用方式。5、 理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。6、 掌握抽象类的定义与使用方式,并注意指针的用法。7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。二、实验设备 1、硬件环境:微型计算机,2、软件环境:visual c+ 6.0;三、实验要求 1、定义派生类的实例#inc
2、lude stdafx.h#include string.h#include iostream.hclass studentprotected:char m_no12,m_name11;int m_sex,m_year,m_month,m_day;public:student() void set(char * no,char * name,int sex,int year,int month,int day)strcpy(m_no,no);strcpy(m_name,name);m_sex=sex;m_year=year;m_month=month;m_day=day;void set_no
3、(char * no)strcpy(m_no,no);void set_name(char * name)strcpy(m_name,name);void set_sex(int sex)m_sex=sex;void set_year(int year)m_year=year;void set_month(int month)m_month=month;void set_day(int day)m_day=day;char * get_no()return m_no;char * get_name()return m_name;int get_sex()return m_sex;int get
4、_year()return m_year;int get_month()return m_month;int get_day()return m_day;class class: public studentprotected:int m_c,m_english;public:class()void set_c(int c)m_c=c;void set_english(int english)m_english=english;int get_c()return m_c;int get_english()return m_english;void list()coutn学号:m_no;cout
5、n姓名:m_name;coutn性别:( (m_sex=0) ? 女 : 男);coutn出生日期:m_year年m_month月m_day日;coutnc+:m_c;coutn英语:m_english;int main(int argc, char* argv)char str100;int x,i;class s10;for (i=0;i=1;i+)coutstr;si.set_no(str);coutstr;si.set_name(str);coutx;si.set_sex(x);coutx;si.set_year(x);cinx;si.set_month(x);cinx;si.set_
6、day(x);coutx;si.set_c(x);coutx;si.set_english(x);for (i=0;i=1;i+)si.list();coutnn;return 0;2、多重继承的实例#include stdafx.h#include iostream.hclass base1public:void show_i()coutin;protected:int i;class base2public:void show_j()coutjn;protected:int j;class derived : publicbase1,public base2public:void set(
7、int x,int y)i=x;j=y;int main(int argc, char* argv)derived obj;obj.set(5,7);obj.show_i();obj.show_j();return 0; 3、有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。试设计一个读者类,它是图书馆类和学生类的派生类,继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。 程序设计: (1)定义一个图书馆类library,其主要功能是记录读者的借书卡号和书名。 (2)定义一个学生类studen
8、t,它的主要作用是记录读者的姓名。 (3)定义一个通过读者类reader,它是library和student的派生类,它除了继承这两个类的数据成员,还定义自己的数据成员,通过该类可以了解到读者的上述所有信息,还记录了读者的借还书日期。3个类的关系如图所示。library 类student类char cardchar bookchar namevoid setlib()void displib()void setstu()void dispstu()reader类char databuf(9)int date1(3)int date2(3)void sstbor()int find()void
9、display()4、虚函数的简单使用。# 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.fn(); void main( ) base be;subclass sc;cout calling test(bc) n ;test(bc);cout calling test(sc) n ;test(sc);5、用抽象类
10、实现的菜单程序。 # include class menu public:virtual void action ( ) = 0;;class item1: public menupublic:virtual void action ()cout 新建文件 endl;;class item2: public menupublic :virtual void action ( )cout 打开文件 endl;;class item3: public menupublic:virtual void action ( )cout 保存文件 endl;;class item4: public menu
11、public:virtual void action() cout关闭文件 endl;void main() int select;menu * fptr4;fptro = new item1;fptr1 = new item2;fptr2 = new item3;fptr3 = new item4;do cout 1 new file endl;cout 2 open file endl;cout 3 save file endl;cout 4 close file endl;cout o exit endl;cin select;if( select = 1 & select action
12、();while( select! =0);for(int i=0;i=3;i+ )delete fptri;6、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基 container类,在其中定义表面积和体积的纯虚函数,在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。分析:定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。定义一个派生于container类的圆柱体类cylind
13、er,在类中都具有求表面积和体积的重定义的成员函数。7、编写一个人员信息管理系统。这个系统的功能是:交互式的实现校园人员信息的录入与显示。分析:学校里,主要有四类人员:大学本科学生、教师、研究生和助教。大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教生除了上课外,还要做研究和一定的教学工作。人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。各个人员之间的关系: people类派生出student 类和teacher类,student 类派生出graduate类, graduate类和te
14、acher类派生出ta类。以下给出部分程序:#include class people public:/添加程序private:;class student: virtual public peoplepublic:/添加程序private:;class teacher:virtual public peoplepublic:/添加程序private:;class graduate: virtual public studentpublic:/添加程序private:;class ta:public people student, public teacherpublic:/添加程序priva
15、te:;void main()/添加程序四、思考问题及课后练习1、编写一个程序,定义一个汽车类vehicle,它具有一个需传递参数的构造函数,类中的数据成员包括车轮个数和车的重量,并放到保护段中;定义轿车类car是汽车类vehicle的私有派生类,其中包含载人数;再定义卡车类truck是汽车类vehicle的私有派生类,其中包含载人数和载重量。每个类都有相应的数据输出。2、设有系类,它的数据包括系编号、系名,功能包括置数据、修改数据和取数据。设有班类,它继承系类,另数据包括学号、姓名、性别,功能包括置数据、修改数据和取数据。主函数默认设置一位同学数据,键盘输入一位同学数据,然后显示二位同学数据
16、。四、实验程序sy3_3:#include #include #include using namespace std;class libraryprotected:char card15;char book20;public:void setlib();void displib();class studentprotected:char name20;public:void setstu();void dispstu();class reader: public library,studentprotected:char datebuf9;int date13;int date23;publ
17、ic:reader();void setbor();int find(char *n);void display();void library:setlib()cout输?入?卡号?:card;cout输?入?书名?book;void library:displib()cout借书卡号?: cardendl;cout书名?: bookendl;void student:setstu()cout输?入?姓?名?: name;void student:dispstu()cout姓?名?: name12) date21=(date11+2)%12; date20=date10+1; else dat
18、e20=date10; date21=date11+2; int main()reader *p;int m,i,j=0;char name20;cout请?输?入?人?数y: m;p=new readerm;for (i=0;im;i+)cout第i+1个?读者?的?借书证: endl;pi.setbor();for (i=0;im;i+)cout第i+1个?读者?的?信?息: endl;pi.display();cout请?输?入?要a查找的?读者?的?姓?名?name;for (i=0;im;i+)if(pi.find(name)pi.display();j=1;break;if(j=0
19、)cout查找的?姓?名?不?存?在endl;sy3_6:#include using namespace std;#define pi 3.14class container /基类public:double radius;virtual void squir()=0;virtual void volume()=0;class cube:public container /正y方?体?类public:cube(double a1=0) radius=a1;void squir()double a2;a2=radius*radius*6;cout正y方?体?的?表面?积y为a: a2endl;
20、void volume()double a3;a3=radius*radius*radius;cout正y方?体?的?体?积y为a: a3endl;class sphere:public container /球类public:sphere(double b1=0)radius=b1;void squir()double b2;b2=4*radius*radius*pi;cout球的?表面?积y为a: b2endl;void volume()double b3;b3=4/3*radius*radius*radius*pi;cout球的?体?积y为a: b3endl;class cylinder
21、:public container /圆2柱体?类private:double h;public:cylinder(double c1=0,double h1=0)radius=c1;h=h1; void squir()double c2;c2=2*pi*radius*radius+2*pi*radius*h;cout圆2柱体?的?表面?积y为a: c2endl;void volume()double c3;c3=pi*radius*radius*h;cout圆2柱体?的?体?积y为a: c3endl;int main()cube c(6);cout正y方?体?的?边?长l=6endl;c.s
22、quir();c.volume();coutendl;sphere s(2);cout球体?的?半?径?r=2endl;s.squir();s.volume();coutendl;cylinder y(2,4);cout圆2柱体?的?底边?半?径?r=2,高?h=4endl;y.squir();y.volume();sy3_7:#include #include using namespace std;class people public:char name20;int num;char sex20;int totaltime;int weektime;int iden;/*people(c
23、har *na,int n,char *s,int week)strcpy(name,na);num=n;strcpy(sex,s);weektime=week;*/void get()coutname;coutnum;coutsex;coutiden;coutweektime;void show()cout姓?名?为a:nameendl;cout编号?为a:numendl;cout性?别e:sexendl;cout身份y证号?为a:idenendl;cout总学时数y为a:totaltimeendl;class student: virtual public peoplepublic:voi
24、d get()people:get();coutendl;void show()people:show();protected:;class teacher:virtual public peoplepublic:void get()people:get();coutttime;totaltime=weektime+ttime;coutendl;void show()people:show();protected:int ttime;class graduate: virtual public studentpublic:void get()student:get();coutgtime;to
25、taltime=weektime+gtime;coutendl;protected:int gtime;class ta: public student, public teacherpublic:void get()people:get();coutttime;coutgtime;totaltime=weektime+ttime+gtime;coutendl;void show()people:show();protected:int gtime;void main()student stu;teacher tea;graduate gra;ta ta;int r,i;cout输?入?你?的
26、?类型: 1.本?科?生 2.教师| 3.研d究?所 4.助教r;switch(r)case 1:stu.get();stu.show();break;case 2:tea.get();tea.show();break;case 3:gra.get();gra.show();break;case 4:ta.get();ta.show();break;sy3_4_1:#include using namespace std;class vehiclepublic:vehicle(int x,double y)wheelnum=x;weight=y;void print()coutvehicle:
27、 endl;cout车轮?个?数y: wheelnumendl;cout车的?重?量?: weightendl;protected:int wheelnum;double weight;class car:private vehicleprivate:int loadnum;public:car(int x,double y,int load):vehicle(x,y)loadnum=load;void print()coutcar: endl;vehicle:print();cout载?人?数y: loadnumendl;class truck:private vehicleprivate:
28、int loadnum;double loadwei;public:truck(int x,double y,int load,double loadw):vehicle(x,y)loadnum=load;loadwei=loadw;void print()couttruck: endl;vehicle:print();cout载?人?数y: loadnumendl;cout载?重?量?: loadweiendl;int main()car a(4,40,6);a.print();coutendl;truck b(6,60,8,30);b.print();sy3_4_2:#include #include using namespace std;class departmentprotected:int dnum;char dname20;public:void setdata(char *i,int j)dnum=j;strcpy(dname,i);void re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地铁站点连接盾构机租赁合同
- 农村林地租赁合同:生态农业研究
- 射箭比赛观众电梯租赁合同
- 校园篮球联赛赛程安排手册
- 网络建设服务承诺模板
- 网络安全遵纪守法经营承诺书
- 影楼后期制作管理品质控制
- 水上酒店防水工程合同
- 应急维修工程师聘用协议
- 团队建设摩托车租赁合约
- 河南省郑氏中原纤维素有限公司年产 0.2 万吨预糊化淀粉、0.5 万吨羧甲基纤维素钠、1.3 万吨羧甲基淀粉钠项目环境影响报告
- 托福命题总监教你征服新口语无
- 高中美术 主题二 时代与变革-为人生而艺术-课件
- 中考英语一般将来时和过去将来时专项讲解
- MT 113-1995煤矿井下用聚合物制品阻燃抗静电性通用试验方法和判定规则
- 2023年度人才工作计划范文10篇
- GB/T 37356-2019色漆和清漆涂层目视评定的光照条件和方法
- 2023年类风湿关节炎心脏损害的中医治疗
- 【公开课课件】高考英语读后续写10
- GA/T 1068-2015刑事案件命名规则
- 逻导习题答案-逻辑学导论
评论
0/150
提交评论