




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+面向对象程序设计实验报告实验序号:03 实验项目名称:派生类与继承学号姓名雷锋专业实验地点指导教师实验时间一、实验目的及要求(1)掌握派生类的声明方法和派生类构造函数的定义方法;(2)掌握不同继承方式下,基类成员在派生类中的访问属性;(3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则;(4)学习虚函数在解决二义性问题中的作用。二、实验设备(环境)及要求Micorsoft Visual C+ 6.0三、实验内容与步骤(题目、算法和结果描述)1、输入下列程序。#includeusing namespace std;class Basepublic:void setx(int i) x=i;int getx() return x;public:int x;class Derived:public Basepublic:void sety(int i)y=i;int gety() return y;void show()coutBase:x=xendl; /语句1public:int y;int main()Derived bb; /语句2bb.setx(16); /语句3bb.sety(25); /语句4bb.show(); /语句5coutBase:x=bb.xendl; /语句6coutDerived:y=bb.yendl; /语句7coutBase:x=bb.getx()endl; /语句8coutDerived:y=bb.gety()endl; /语句9return 0;(1) 写出程序的运行结果。【运行结果截图】:(2) 按以下要求,对程序进行修改后再调试,指出调试中出错的原因。1) 将基类Base中的数据成员x的访问权限改为private时,会出现哪些错误,为什么?【运行结果分析】:私有继承不能访问基类公有成员的对象。2) 将基类Base中的数据成员x的访问权限改为protected时,会出现哪些错误,为什么?【运行结果分析】:私有继承不能访问基类保护成员的对象。3) 在原程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?【运行结果分析】:公有继承时不能访问基类的私有成员的内部和对象,不能访问基类的保护成员的对象。4) 在原程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?【运行结果分析】:保护继承时不能访问基类的私有成员的内部和对象,不能访问基类公有成员和保护成员的对象。2、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Persona,并作为学生类Student和教师类Teacher的基类。【person类结构】:class Personapublic:Persona(int numberl,string namel,string sexl,int agel)number=numberl;name=namel;sex=sexl;age=agel;void print()coutnumber:numberendl;coutname:nameendl;coutsex:sexendl;coutage:ageendl;protected:int number;string name;string sex;int age;【Student类结构】:class Student:private Personapublic:Student(int numberl,string namel,string sexl,int agel,string gradel,float scorel):Persona(numberl,namel,sexl,agel)grade=gradel;score=scorel;void print()Persona:print();coutgrade:gradeendl;coutscore:scoreendl;private:string grade;float score;【Teacher类结构】:class Teacher:private Personapublic:Teacher(int numberl,string namel,string sexl,int agel,string positionl,string departmentl):Persona(numberl,namel,sexl,agel)position=positionl;department=departmentl;void print()Persona:print();coutposition:positionendl;coutdepartment:departmentendl;private:string position;string department;【运行结果截图】:3、按要求阅读、编辑、编译、调试和运行以下程序。(1)阅读、编辑、编译、调试和运行以下程序,并写出程序运行结果。#include#includeusing namespace std;class MyArraypublic:MyArray(int leng);MyArray();void Input();void Display(string);protected:int *alist;int length;MyArray:MyArray(int leng) if(leng=0)couterror length;exit(1);alist=new int leng;length=leng;if(alist=NULL)coutassign failure;exit(1);coutMyArray 类对象已创建。endl;MyArray:MyArray()delete alist;coutMyArray 类对象被撤销。endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength个整数:;for(i=0;ilength;i+,p+)cout*p ;coutendl;void MyArray:Input()cout请从键盘输入length个整数:;int i;int *p=alist;for(i=0;i*p;int main()MyArray a(5);a.Input();a.Display(显示已输入的);return 0;(2)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。【提示】:请注意编写继承类的构造函数、析构函数,以及修改主函数。【SortArray类框架】:class SortArray:public MyArraypublic:void Sort();SortArray(int leng):MyArray(leng)coutSoryArray 类对象已创建。endl;virtualSortArray();SortArray:SortArray()coutSortArray 类对象被撤销。endl;【运行结果截图】:(3)声明一个类ReArray继承类MyArray,在该类中定义一个函数,即有将输入的整数进行倒置的功能。【提示】:请注意编写继承类的构造函数、析构函数,以及修改主函数。【ReArray类框架】:class ReArray:public MyArraypublic:void reverse();ReArray()coutReArray类对象被撤销。endl;ReArray(int leng):MyArray(leng)coutReArray类对象已创建。endl;【运行结果截图】:(4)声明一个类Average继承类MyArray,在该类中定义一个函数,即有将输入的整数进行求平均值的功能。【提示】:请注意编写基继承类的构造函数、析构函数,以及修改主函数。【Average类框架】:class AverArray:public MyArraypublic:AverArray(int leng): MyArray(leng)coutMyArray类对象已创建。endl;AverArray()coutAverArray类对象被撤销。endl;double Aver();double AverArray: Aver()double sum=0,average;int i;for( i=0;ilength;i+)sum+=alisti;average=sum/length;cout平均数是:averageendl;return 0;【运行结果截图】:(5)声明一个NewArray类,同时继承了类SortArray,ReArray和Average,使得类NewArray的对象同时具有排序、倒置和求平均值的功能。在继承的过程中声明MyArray为虚基类,体会虚基类在解决二义性问题中的作用。【NewArray类框架】:class NewArray:public SortArray ,public ReArray,public AverArray ,virtual public MyArraypublic:NewArray(int leng):SortArray(leng),ReArray(leng),AverArray(leng),MyArray(leng)coutNewArray类对象已创建。endl;NewArray()coutNewArray类对象被撤销。endl;【运行结果截图】:四、分析与讨论(记录实验过程中出现的主要问题和心得体会)五、教师评语签名:日期:成绩附:程序源代码1、#includeusing namespace std;class Basepublic:void setx(int i) x=i; int getx() return x;public:int x;class Derived:public Basepublic:void sety(int i)y=i;int gety() return y;void show()coutBase:x=xendl; /语句1public:int y;int main()Derived bb; /语句2 bb.setx(16); /语句3bb.sety(25); /语句4bb.show(); /语句5coutBase:x=bb.xendl; /语句6coutDerived:y=bb.yendl; /语句7coutBase:x=bb.getx()endl; /语句8coutDerived:y=bb.gety()endl; /语句9return 0;2#include#includeusing namespace std;class Personapublic:Persona(int numberl,string namel,string sexl,int agel)number=numberl;name=namel;sex=sexl;age=agel;void print()coutnumber:numberendl;coutname:nameendl;coutsex:sexendl;coutage:ageendl;protected:int number;string name;string sex;int age;class Student:private Personapublic:Student(int numberl,string namel,string sexl,int agel,string gradel,float scorel):Persona(numberl,namel,sexl,agel)grade=gradel;score=scorel;void print()Persona:print();coutgrade:gradeendl;coutscore:scoreendl;private:string grade;float score;class Teacher:private Personapublic:Teacher(int numberl,string namel,string sexl,int agel,string positionl,string departmentl):Persona(numberl,namel,sexl,agel)position=positionl;department=departmentl;void print()Persona:print();coutposition:positionendl;coutdepartment:departmentendl;private:string position;string department;int main()Student per(12138,张三,男,21,计算机系,100);Teacher pac(1001,张四,男,45,主任,后勤);per.print();pac.print();return 0;、3.1#include#includeusing namespace std;class MyArraypublic:MyArray(int leng);MyArray();void Input();void Display(string);protected:int *alist;int length;class SortArray:public MyArraypublic:void Sort();SortArray(int leng):MyArray(leng)coutSoryArray 类对象已创建。endl;virtualSortArray();SortArray:SortArray()coutSortArray 类对象被撤销。endl;MyArray:MyArray(int leng)if(leng=0)couterror length;exit(1);alist=new intleng;length=leng;if(alist=NULL)coutassign failure;exit(1);coutMyArray类对象已创建.endl;MyArray:MyArray()deletealist;coutMyArray类对象被撤销.endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength个整数:;for(i=0;ilength;i+,p+)cout*p ;coutendl;void MyArray:Input()cout请从键盘输入length个整数:;int i;int *p=alist;for(i=0;i*p;void SortArray:Sort()int temp,i,j;for(i=0;ilength-1;i+)for(j=0;jalistj+1)temp=alistj;alistj=alistj+1;alistj+1=temp;int main()SortArray s(5);s.Input();s.Display(显示排序前的);s.Sort();s.Display(显示排序以后的);return 0;3.2#include#includeusing namespace std;class MyArraypublic:MyArray(int leng); MyArray();void Input();void Display(string);protected:int *alist;int length;class ReArray:public MyArray public:void reverse();ReArray()coutReArray类对象被撤销。endl;ReArray(int leng):MyArray(leng)coutReArray类对象已创建。endl;MyArray:MyArray(int leng)if(leng=0)couterror length;exit(1);alist=new int leng;length=leng;if(alist=NULL)coutassign failure;exit(1);coutMyArray类对象已创建。endl; MyArray:MyArray()delete alist;coutMyArray类对象被撤销。endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength个整数:;for(i=0;ilength;i+,p+)cout*p ;coutendl;void MyArray:Input()cout请键盘输入length个整数:;int i;int *p =alist;for(i=0;i*p; void ReArray:reverse()int i,temp;for(i=0;ilength-2;i+) temp=alisti;alisti=alist4-i;alist4-i=temp; int main()ReArray a(5); a.Input();a.Display(显示已输入的);a.reverse();a.Display(显示已输出的);return 0;3.3#include#includeusing namespace std;class MyArraypublic:MyArray(int leng);MyArray();void Input();void Display(string );protected:int *alist;int length;MyArray:MyArray(int leng) if(leng=0)couterror length;exit(1);alist=new int leng;length=leng;if(alist=NULL)coutassign failure;exit(1);coutMyArray类对象已创建。endl;MyArray:MyArray() delete alist;coutMyArray类对象被撤销。endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength个整数:;for(i=0;ilength;i+,p+)cout*p ;coutendl;void MyArray:Input()cout请键盘输入length个整数:;int i;int *p =alist;for(i=0;i*p;class AverArray:public MyArraypublic:AverArray(int leng): MyArray(leng)coutMyArray类对象已创建。endl;AverArray()coutAverArray类对象被撤销。endl;double Aver();double AverArray: Aver()double sum=0,average;int i;for( i=0;ilength;i+)sum+=alisti;average=sum/length;cout平均数是:averageendl;return 0;int main()AverArray a(5);a.Input();a.Display(显示已输入的);a.Aver();return 0;3.4#include#includeusing namespace std;class MyArraypublic:MyArray(int leng);MyArray();void Input();void Display(string );protected:int *alist;int length;MyArray:MyArray(int leng)if(leng=0)couterror length;exit(1);alist=new int leng;length=leng;if(alist=NULL)coutassign failure;exit(1);coutMyArray类对象已创建。endl;MyArray:MyArray()delete alist;coutMyArray类对象被撤销。endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength个整数:;for(i=0;ilength;i+,p+)cout*p ;coutendl;void MyArray:Input()cout请键盘输入length个整数:;int i;int *p =alist;for(i=0;i*p;class SortArray :virtual public MyArray public:void Sort();SortArray(int leng):MyArray(leng)coutSortArray类对象已创建。endl;virtual SortArray();SortArray:SortArray()coutSortArray类对象被撤销。endl;void SortArray:Sort() int temp,i,j; for(i=0;ilength-1;i+)for(j=0;jalistj+1) temp=alistj;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025西安寰宇卫星测控与数据应用有限公司招聘(5人)笔试参考题库附带答案详解
- 2025甘肃禹力水电工程有限责任公司招聘15人笔试参考题库附带答案详解
- 2025浙江百康光学股份有限公司招聘51人笔试参考题库附带答案详解
- 2025河南郑州市新密市国开投资集团有限公司招聘管理人员和专业技术人员9人笔试参考题库附带答案详解
- 2025江苏苏州市张家港市建安工程机械质量检测有限公司招聘16人笔试参考题库附带答案详解
- 2025广西水利发展集团商贸有限公司招聘12人笔试参考题库附带答案详解
- 2025年重庆建工第三建设有限责任公司招聘1人笔试参考题库附带答案详解
- 2025年河南省储备粮管理集团招聘12人笔试参考题库附带答案详解
- 2025年国航股份西藏分公司“三地招聘”活动专项招聘3人笔试参考题库附带答案详解
- 2025年四川绵阳市公共交通集团有限责任公司招聘公交车驾驶员40人笔试参考题库附带答案详解
- 2025年湖南银行社招笔试题库及答案
- 2025年精密数控机床进口采购合同
- DB44T 2635-2025 国土变更调查县级数据库建设技术规范
- 海南省2025年中考化学真题试题(含答案)
- 脱证中医护理常规
- 中国全自动样品处理系统行业投资分析及发展战略咨询报告
- 未来趋势:2025年采购管理优化方案
- 某小学科学实验操作考核细则
- 执法办案培训课件
- 中小学小班化教学模式与支持体系构建研究
- 2025年陕西省中考英语试题卷(含答案及解析)
评论
0/150
提交评论