面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx
- 文档编号:9106578
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:22
- 大小:134.63KB
面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx
《面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx(22页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实验报告实验三继承与多态性s00016曾峻
广州大学学生实验报告
开课学院及实验室:
计算机科学与工程实验室2014年11月6日
学院
化学化工学院
年级、专业、班
化学2班
姓名
曾峻
学号
s2*******6
实验课程名称
面向对象的程序设计
成绩
实验项目名称
实验三继承与多态性
指导老师
熊伟
一、实验目的
1、掌握继承、基类和派生类的概念。
2、掌握初始化基类成员的方法。
3、掌握派生类对基类的继承。
4、学习虚函数和纯虚函数的定义与使用方式。
5、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。
6、掌握抽象类的定义与使用方式,并注意指针的用法。
7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。
二、使用仪器、器材
1、硬件环境:
微型计算机,2、软件环境:
VisualC++6.0;
三、实验内容及步骤
1、定义派生类的实例
#include"stdafx.h"
#include"string.h"
#include"iostream.h"
classSTUDENT
{protected:
charm_no[12],m_name[11];
intm_sex,m_year,m_month,m_day;
public:
STUDENT(){}
voidset(char*no,char*name,intsex,intyear,intmonth,intday)
{strcpy(m_no,no);
strcpy(m_name,name);
m_sex=sex;
m_year=year;
m_month=month;
m_day=day;
}
voidset_no(char*no)
{strcpy(m_no,no);}
voidset_name(char*name)
{strcpy(m_name,name);}
voidset_sex(intsex)
{m_sex=sex;}
voidset_year(intyear)
{m_year=year;}
voidset_month(intmonth)
{m_month=month;}
voidset_day(intday)
{m_day=day;}
char*get_no()
{returnm_no;}
char*get_name()
{returnm_name;}
intget_sex()
{returnm_sex;}
intget_year()
{returnm_year;}
intget_month()
{returnm_month;}
intget_day()
{returnm_day;}
};
classCLASS:
publicSTUDENT
{protected:
intm_c,m_english;
public:
CLASS(){}
voidset_c(intc)
{m_c=c;}
voidset_english(intenglish)
{m_english=english;}
intget_c()
{returnm_c;}
intget_english()
{returnm_english;}
voidlist()
{cout<<"\n学号:
"< cout<<"\n姓名: "< cout<<"\n性别: "<<((m_sex==0)? "女": "男"); cout<<"\n出生日期: "< cout<<"\nC++: "< cout<<"\n英语: "< } }; intmain(intargc,char*argv[]) { charstr[100]; intx,i; CLASSs[10]; for(i=0;i<=1;i++) {cout<<"\n\n请输入学生的学号: "; cin>>str; s[i].set_no(str); cout<<"姓名: "; cin>>str; s[i].set_name(str); cout<<"性别: "; cin>>x; s[i].set_sex(x); cout<<"出生日期: "; cin>>x; s[i].set_year(x); cin>>x; s[i].set_month(x); cin>>x; s[i].set_day(x); cout<<"C++: "; cin>>x; s[i].set_c(x); cout<<"英语: "; cin>>x; s[i].set_english(x); } for(i=0;i<=1;i++) s[i].list(); cout<<"\n\n"; return0; } 2、多重继承的实例 #include"stdafx.h" #include"iostream.h" classBASE1 {public: voidshow_i() {cout< protected: inti; }; classBASE2 {public: voidshow_j() {cout< protected: intj; }; classDERIVED: publicBASE1,publicBASE2 {public: voidset(intx,inty) {i=x;j=y;} }; intmain(intargc,char*argv[]) {DERIVEDobj; obj.set(5,7); obj.show_i(); obj.show_j(); return0; } 3、有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。 试设计一个读者类,它是图书馆类和学生类的派生类,继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。 程序设计: (1)定义一个图书馆类Library,其主要功能是记录读者的借书卡号和书名。 (2)定义一个学生类Student,它的主要作用是记录读者的姓名。 (3)定义一个通过读者类Reader,它是Library和Student的派生类,它除了继承这两个类的数据成员,还定义自己的数据成员,通过该类可以了解到读者的上述所有信息,还记录了读者的借还书日期。 3个类的关系如图所示。 Library类 Student类 CharCard CharBook CharName voidSetLib() voidDispLib() voidSetStu() voidDispStu() Reader类 Chardatabuf(9) IntDate1(3) Intdate2(3) VoidSstBor() IntFind() VoidDisplay() 4、虚函数的简单使用。 #include classbase {public: virtualvoidfh(){cout«"Inbaseclass\n";} }; classsubclass: publicbase {public: virtualvoidfn(){cout«"Insubclass\n";} }; voidtest(base&b) {b.fn();} voidmain() {basebe; subclasssc; cout«"Callingtest(bc)\n"; test(bc); cout«"Callingtest(sc)\n"; test(sc); } 5、用抽象类实现的菜单程序。 #include classMenu {public: virtualvoidaction()=0; }; classitem1: publicMenu {public: virtualvoidaction() {cout«"新建文件"«endl;} }; classitem2: publicMenu {public: virtualvoidaction() {cout«"打开文件"«endl;} }; classitem3: publicMenu {public: virtualvoidaction() {cout«"保存文件"«endl;} }; classitem4: publicMenu {public: virtualvoidaction() {cout«关闭文件"«endl;} }; voidmain() {intselect; Menu*Fptr[4]; Fptr[O]=newitem1; Fptr[1]=newitem2; Fptr[2]=newitem3; Fptr[3]=newitem4; Do {cout«"1newfile"«endl; cout«"2openfile"«endl; cout«"3savefile"«endl; cout«"4closefile"«endl; cout«"Oexit"«endl; cin》select; if(select>=1&&select<=4)Fptr[select-1]->action(); }while(select! =0); for(inti=0;i<=3;i++) {deleteFptr[i];} 6、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基container类,在其中定义表面积和体积的纯虚函数,在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。 分析: 定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。 定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。 定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。 7、编写一个人员信息管理系统。 这个系统的功能是: 交互式的实现校园人员信息的录入与显示。 分析: 学校里,主要有四类人员: 大学本科学生、教师、研究生和助教。 大学本科生每周有固定的学时数。 教师除了固定的学时数外,还有每周的教学时数。 研究生除了固定的学时数外,每周还可以自由做一定的研究。 助教生除了上课外,还要做研究和一定的教学工作。 人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。 各个人员之间的关系: people类派生出student类和teacher类,student类派生出graduate类,graduate类和teacher类派生出TA类。 以下给出部分程序: #include classpeople {public: //添加程序 private: }; classstudent: virtualpublicpeople {public: //添加程序 private: }; classteacher: virtualpublicpeople {public: //添加程序 private: }; classgraduate: virtualpublicstudent {public: //添加程序 private: }; classTA: publicpeoplestudent,publicteacher {public: //添加程序 private: }; voidmain() {//添加程序} 四、实验过程原始数据记录 /* 有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。 试设计一个读者类,它是图书馆类和学生类的派生类, 继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。 程序设计: (1)定义一个图书馆类Library,其主要功能是记录读者的借书卡号和书名。 (2)定义一个学生类Student,它的主要作用是记录读者的姓名。 (3)定义一个通过读者类Reader,它是Library和Student的派生类,它除了继承这两个类的数据成员,还定义自己的数据成员, 通过该类可以了解到读者的上述所有信息,还记录了读者的借还书日期。 */ #include usingnamespacestd; classLibrary { public: intcardno; charbookname[30]; Library(intc,char*b){strcpy_s(bookname,b);cardno=c;} }; classStudent { public: charreadername[30]; Student(char*r){strcpy_s(readername,r);} }; classReader: publicLibrary,publicStudent { public: charreturndate[30]; Reader(char*rd): Library(2,"中华经典诵读"),Student("小明") {strcpy_s(returndate,rd);} friendvoidprint(); friendReaderoperator<<(constostream&out,constReader&ri); }; Readeroperator<<(ostream&out,Reader&ri) { out< returnri; } voidprint(Reader&ri) { cout< } voidmain() { Readerr1("12月1日"); print(r1); } /*6、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基container类,在其中定义表面积和体积的纯虚函数, 在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。 分析: 定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。 定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。 定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。 */ #include usingnamespacestd; classcontainer { public: virtualvoidsurfacearea()const=0; virtualvoidvolume()const=0; voidgetvalues(doubler){radius=r;} voidgetvalues(doubler,doubleh){radius=r;height=h;} doubleradius; doubleheight; }; classcube: publiccontainer { public: voidsurfacearea()const { cout<<"正方形面积: "< } voidvolume()const { cout<<"正方形体积: "< } }; classsphere: publiccontainer { public: voidsurfacearea()const { cout<<"球体面积: "< } voidvolume()const { cout<<"球体体积: "<<4/3*3.1415926*radius*radius*radius< } }; classcylinder: publiccontainer { public: voidsurfacearea()const { cout<<"圆柱体面积: "< } voidvolume()const { cout<<"圆柱体体积: "<<3.1415926*radius*radius*height< } }; voidmain() { doubler1; doubleh1; cubec; spheres; cylindercy; cout<<"请输入半径(或长)"< cin>>r1; cout<<"请输入高"< cin>>h1; c.getvalues(r1); c.surfacearea(); c.volume(); s.getvalues(r1); s.surfacearea(); s.volume(); cy.getvalues(r1,h1); cy.surfacearea(); cy.volume(); } /*编写一个人员信息管理系统。 这个系统的功能是: 交互式的实现校园人员信息的录入与显示。 分析: 学校里,主要有四类人员: 大学本科学生、教师、研究生和助教。 大学本科生每周有固定的学时数。 教师除了固定的学时数外,还有每周的教学时数。 研究生除了固定的学时数外,每周还可以自由做一定的研究。 助教生除了上课外,还要做研究和一定的教学工作。 人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。 各个人员之间的关系: people类派生出student类和teacher类,student类派生出graduate类,graduate类和teacher类派生出TA类。 */ #include usingnamespacestd; classpeople { public: charname[30]; charno[30]; charsex[30]; charcardno[30]; inttotalhours; inthourspw; /*people(char*n,char*nno,char*s,char*c,intt,inth) { strcpy_s(name,n);strcpy_s(no,nno);strcpy_s(sex,s);strcpy_s(cardno,c);totalhours=t;hourspw=h; }*/ people(){} }; classstudent: virtualpublicpeople { public: friendstudentoperator>>(istream&in,student&s) { cout<<"请依次输入大学本科生姓名,学号,性别,身份证号,总学时数,每周固定学时数"< in>>s.name;in>>s.no;in>>s.sex;in>>s.cardno;in>>s.totalhours;in>>s.hourspw; returns; } friendstudentoperator<<(ostream&out,student&s) { cout<<"大学本科生: "<<"学号";out< cout<<"性别";out< cout<<"身份证号";out< cout<<"总学时数";out< cout<<"每周固定学时数";out< returns; } }; classteacher: virtualpublicpeople { public: intteachhours; friendteacheroperator>>(istream&in,teacher&t) { cout<<"请依次输入教师姓名,号码,性别,身份证号,总学时数,每周固定学时数,每周教学时数"< in>>t.name;in>>t.no;in>>t.sex;in>>t.cardno;in>>t.totalhours;in>>t.hourspw;in>>t.teachhours; returnt; } friendteacheroperator<<(ostream&out,teacher&t) { cout<<"教师: "<<"号码";out< cout<<"性别";out< cout<<"身份证号";out<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻 面向 对象 程序设计 实验 报告 继承 多态性