




免费预览已结束,剩余31页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验2 派生类与继承实验课程名:高级语言程序设计专业班级: 12网工2班 学号: 201240420228 姓名: 刘小虎 实验时间: 4.20-5.5 实验地点: K4-201 指导教师: 祁文青 一实验目的和要求(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()cout”Base:x=”xendl;public:inty;int main()Derived bb;bb,setx(16);bb.sety(25);bb.show();cout”Base:x=”bb.xendl;cout”Derived:y=”bb.yendl;cout”Base:x=”bb.getx()endl;cout”Derived:y=”bb.gety()endl;return 0;(1) 写出程序的运行结果。(2) 按以下要求,对程序进行修改后再调试,指出调试中出错的原因。将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么?在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?解答:1.2.(1).这2条语句错误cout”Base:x=”xendl;cout”Base:x=”bb.xendl;将基类Base中数据成员x的访问权限改为private后,它在派生类中的访问属性变为不可访问的成员,因此在派生的Derived类中不能访问数据成员X,以及也不能在派外直接引用。(2). 这条语句错误cout”Base:x=”bb.xendl;将基类Base中数据成员x的访问权限改为protected后,经过公用继承,它在派生类中的访问属性任然为protected,所以在派外不能用对象引用。(3)以下语句会出错:bb.setx(16);coutBase:x=bb.xendl;coutBase:x=bb.getx()endl;将派生类Derived的继承方式改为private后,基类中的公有成员在派生类中访问属性都变为私有的,所以在派外不能用对象引用。(4)以下语句会出错:bb.setx(16);coutBase:x=bb.xendl;coutBase:x=bb.getx()endl;将派生类Derived的继承方式改为protected后,基类中的公有成员在派生类中访问属性都变为保护的,所以在派外不能用对象引用。2.编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。供参考的类结构如下:class Person.;class Student:public Person.;class Teacher:public Person.;解答:程序如下#include#includeusing namespace std;class Personpublic:void get_value()cinnumnamesexage;void display()coutnum:numendl;coutname:nameendl;coutsex:sexendl;coutage:agexibiescore;void display_1()coutxibie:xibieendl;coutscore:scoretitlebumen;void display_2()couttitle:titleendl;cout bumen:bumenmn;Student *stud=new Studentn;for(i=0;in;i+)studi.get_value();studi.get_value_1();studi.display();studi.display_1();Teacher * teach=new Teacher m;for(i=0;im;i+)teachi.get_value();teachi.get_value2();teachi.display();teachi.display_2();cout201240420228,刘小虎endl;return 0;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)cout”error length”;exit(1);alist=new int leng;length=leng;if(alist=NULL)cout”assign failure”;exit(1);cout”MyArray类对象已创建。”endl;MyArray:MyArray()delete alist;cout”MyArray类对象被撤销。”endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength”个整数:“;for(i=0;ilength;i+,p+)cout*p”;coutendl;void MyArray:Inputcout”请键盘输入”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,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。【提示】在第(1)步的基础上可增加下面的参考框架:class SortArray : public MyArray public:void Sort();SortArray(int leng):MyArray(leng)cout”SortArray类对象已创建。”endl;virtual SortArray();SortArray:SortArray()cout”SortArray类对象被撤销。”endl;void SortArray:Sort()/请自行编写Sort函数的代码,将输入的整数从小到大排序。/并将主函数修改为:int main()SortArray a(5);s.Input();s.Display(“显示排序以前的”);s.Sort();s.Display(“显示排序以后的”);return 0;声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。【提示】在第(1)步的基础上可增加下面的参考框架:Class ReArray:public MyArrayPublic:Void reverse();ReArray(int leng);Virtual ReArray();请读者自行编写构造函数、析构函数和倒置函数ReArray,以及修改主函数。(3) 声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。 【提示】 在第(1)步的基础上增加下面的参考框架:class AverArray:public MyArrayPublic:AverArray(int leng);AverArray();Double Aver();请读者自行编写构造函数、析构函数和求平均值函数Aver(求解整数的平均值),以及修改主函数。(2) 声明一个NewArray类,同时继承了类SortArray,ReArray和AverArray,使得类NewArray的对象同时具有排序、倒置和求平均值的功能。在继承的过程中声明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 SortArray : public MyArray public:void Sort();SortArray(int leng):MyArray(leng)coutSortArray类对象已创建。endl;virtual SortArray();SortArray:SortArray()coutSortArray类对象被撤销。endl;void SortArray:Sort() int *a=alist; int i,j,temp; for(i=0;ilength-1;i+) for(j=0;j*(a+j+1) temp=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=temp; int main()SortArray a(5);a.Input();a.Display(显示排序以前的);a.Sort();a.Display(显示排序以后的);cout201240420228,刘小虎endl; return 0;#include #include using namespace std; class MyArray public: 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 ReArray : public MyArray public: void reverse(); ReArray(int leng):MyArray(leng) coutReArray类对象已创建。endl; virtual ReArray(); ;ReArray:ReArray()coutReArray类对象被撤销。endl;void ReArray: reverse ()int i,j,m,temp;m=(length-1)/2;int *p=alist;for(i=0;i=m;i+)j=length-i-1;temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;int main()ReArray s(5);s.Input();s.Display(显示倒置以前的);s.reverse();s.Display(显示倒置以后的);cout201240420228,刘小虎endl;return 0;#include#includeusing namespace std;class MyArray public: 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: double Aver(); AverArray(int leng):MyArray(leng) coutAverArray类对象已创建。endl; virtual AverArray(); ;AverArray:AverArray()coutAverArray类对象被撤销。endl;double AverArray:Aver()double m=0;for(int i=0;ilength;i+)m=alisti+m;cout显示length个整数的平均值:;return m/length;int main()AverArray s(5);s.Input();s.Display(显示);couts.Aver()endl;cout201240420228,刘小虎endl;return 0;#include#includeusing namespace std;class MyArray public: 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 *a=alist; int i,j,temp; for(i=0;ilength-1;i+) for(j=0;j*(a+j+1) temp=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=temp; class ReArray :virtual public MyArray public: void reverse(); ReArray(int leng):MyArray(leng) coutReArray类对象已创建。endl; virtual ReArray(); ;ReArray:ReArray()coutReArray类对象被撤销。endl;void ReArray: reverse ()int i,j,m,temp;m=(length-1)/2;int *p=alist;for(i=0;i=m;i+)j=length-i-1;temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp; class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全知识与7S培训课件
- 安全知格培训学成绩课件
- 2024年二年级品生下册《我随爸爸去做客》说课稿2 苏教版
- 安全相关法规培训学习课件
- 安全监管职责培训课件
- 地下车位物业服务协议模板6篇
- 海事局安全培训证书查询课件
- 安全监督志愿者培训课件
- 2024-2025学年七年级历史下册 7 辽、西夏与北宋的并立说课稿 新人教版
- 海丝酷爽安全生产培训课件
- 2025中国铁路北京局集团有限公司招聘高校毕业生76人(三)笔试参考题库附带答案详解(10套)
- 浙教版2025-2026学年八年级上科学第1章 对环境的察觉 单元测试卷
- 基底细胞癌护理查房
- 2025保密观知识竞赛题库(试题附答案25个)
- 2025-2026学年人教版(2024)初中生物八年级上册(全册)教学设计(附目录)
- 煤矿监管培训方案
- 企业反腐倡廉培训课件
- 湿疮湿疹中医护理查房
- 2025年6月新《中华人民共和国治安管理处罚法》全文+修订宣贯解读课件(原创内容丰富且全)
- DB31/T 1377.4-2022实验鸡和鸭第4部分:设施及环境
- 2025邮储银行面试题目及答案
评论
0/150
提交评论