已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 派生类与继承实验课程名:面向对象程序设计(C+)专业班级: 11计科(1)班 学号: 姓名: 实验时间:4.17 实验地点: K4-203 指导教师: 2.1实验目的和要求(1) 掌握派生类的声明方法和派生类构造函数的定义方法。(2) 掌握不同继承方式下,基类成员在派生类中的访问属性。(3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4) 学习虚基类在解决二义性问题中的作用。2.2实验内容与步骤1.输入下列程序。/test4_1.cpp#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;public:int y;int main()Derived bb;bb.setx(16);bb.sety(25);bb.show();coutBase:x=bb.xendl;coutDerived:y=bb.yendl;coutBase:x=bb.getx()endl;coutDerived:y=bb.gety()endl;return 0;写出程序的运行结果。(2) 按以下要求,对程序进行修改后再调试,指出调试中出错的原因。将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?因为基类Base中数据成员x的访问权限改为private时,基类的私有成员在派生类中并没有成为派生类的私有成员,使得再通过派生类的对象调用x时,不能被系统所识别,出现了错误。将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么?因为基类Base中数据成员x的访问权限改为protected时,公用基类的保护成员在公用派生类中的访问属性仍然是保护,在公用派生类外就不能通过公用派生类的对象访问该成员,所以出现了错误。在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?将派生类Derived的继承方式改为private时,私有基类中的公用成员在私有派生类中的访问属性为私有,在类外不能通过对象调用私有成员,只能通过成员函数调用.在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?因为私有继承时基类中的公有函数到派生类中一是私有成员,不能通过对象访问,只能通过成员函数来访问。2.编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。供参考的类结构如下:class Person.;class Student:public Person.;class Teacher:public Person.;程序代码:#include#includeusing namespace std;class Personpublic: Person(int n,string nam,char s,int a)num=n;name=nam;sex=s;age=a;Person()protected:int num;string name;char sex;int age; ;class Student:public Personpublic: Student(int n,string nam,char s,int a,string ap,int sc):Person( n,nam, s, a) apart=ap;score=sc;void show1()coutnum:numendl;coutname:nameendl;coutsex:sexendl;coutage:ageendl;coutapart:apartendl;coutscore:scoreendlendl;Student()private: string apart;int score;class Teacher:public Person public: Teacher(int n,string nam,char s,int a,string z,string t):Person( n, nam, s, a)zhi=z; title=t;void show2()coutnum:numendl;coutname:nameendl;coutsex:sexendl;coutage:ageendl;coutzhi:zhiendl;couttitle:titleendl;Teacher() private: string zhi; string title;int main()Student S(1001,yang-heng,f,21,computer,98); Teacher T(2009,li-sheng,f,35,manager,education);S.show1();T.show2();return 0;程序运行结果:(3)调试程序时会出现以下错误:调用函数是应注意其访问权限,基类函数的私有成员只能被其成员函数访问,不能被派生类的对象和成员函数所访问,还要注意调用派生类的构造函数时的参数列表表达形式。(4)结果分析:注意构造函数和派生类调用基类的构造函数赋值,在后面对新增的参数初始化,通过对象赋值后再对其输出。 (3.按要求阅读、编辑、编译、调试和运行以下程序。(1) 阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。 /test4_3_1.cpp程序代码:#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,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。程序代码:#include#includeusing namespace std;class MyArraypublic:MyArray(int leng);MyArray();void Input();void Display(string );protected:int *alist;int length;class SortArray : public MyArray public:void Sort();SortArray(int leng):MyArray(leng)coutSortArray类对象已创建。endl;virtual SortArray();SortArray:SortArray()coutSortArray类对象被撤销。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 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;程序运行结果:(2).声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。 程序代码:#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) 声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。 程序代码:#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;程序运行结果: (2)程序代码:#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; alistj=alistj+1; alistj+1=temp;class ReArray:virtual public MyArray public:void reverse();ReArray(int leng);virtual ReArray();ReArray:ReArray(int leng):MyArray(leng)if(leng=0)couterror length;exit(1); void ReArray:reverse() int i,temp;for(i=0;ilength-2;i+)temp=alisti;alisti=alist4-i;alist4-i=temp; ReArray:ReArray()coutReArray类对象被撤销。endl;class AverArray:virtual public MyArraypublic:AverArray(int leng): MyArray(leng)coutAyArray类对象已创建。endl;AverArra
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学《测绘工程-测绘数据处理与平差》考试模拟试题及答案解析
- 2025年大学《药学-药物化学》考试备考试题及答案解析
- 2025年大学《飞行器设计与工程-飞行器设计与工程概论》考试模拟试题及答案解析
- 2025年大学《卫生监督-卫生行政处罚》考试模拟试题及答案解析
- 2025年大学《轻化工程-轻化工业环境保护与废水处理》考试模拟试题及答案解析
- 2025年大学《食品营养与检验教育-教学技能与检验实训》考试备考题库及答案解析
- 2025年大学《医学影像学-医学影像学概论》考试参考题库及答案解析
- 2025年大学《农业资源与环境-农业面源污染控制》考试备考题库及答案解析
- 2025年大学《曲艺-曲艺表演技巧》考试模拟试题及答案解析
- 2025年大学《航空航天工程-飞行器动力装置基础》考试备考试题及答案解析
- 2025国网河北省电力校园招聘(提前批)笔试模拟试题浓缩500题及完整答案详解1套
- 2025-2026学年上学期小学语文统编版三年级期中必刷常考题之作文
- 运动馆安全培训课件
- 2025江苏南京玄武区招聘社区工作者和“两新”组织专职党务工作人员70人考试参考试题及答案解析
- 涂装知识培训课件
- 2025年国家开放大学《体育保健学》期末考试备考试题及答案解析
- 2025四川成都新都投资集团有限公司招聘23人笔试历年参考题库附带答案详解
- 热成像在桥梁检测中的应用-洞察及研究
- 2025年内蒙古自治区直属国有企业招聘考试笔试试题(含答案)
- 化工项目安全设计培训课件
- 中国资源循环集团有限公司子公司招聘笔试题库2025
评论
0/150
提交评论