C++实验类和对象_第1页
C++实验类和对象_第2页
C++实验类和对象_第3页
C++实验类和对象_第4页
C++实验类和对象_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 类和对象实验课程名:面向对象程序设计(C+)专业班级: 09计算机科学与技术(2)班 学号: 姓名: 实验时间: 实验地点: K4-102 指导教师: 一、实验目的和要求(1) 掌握派生类的声明方法和派生类构造函数的定义方法。(2) 掌握不同继承方式下,基类成员在派生类中的访问属性。(3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4) 学习虚基类在解决二义性问题中的作用。二、实验内容(一)输入下列程序#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;(1) 写出程序的运行结果。(2) 按以下要求,对程序进行修改后再调试,指出调试中出错的原因。将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么?在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?解答:(1) 运行结果:(2) 调试中出错的原因:将基类Base中数据成员x的访问权限改为private时,出现错误“error C2248: x : cannot access private member declared in class Base”。在公有继承中,内部访问和对象访问均不能访问基类Base的私有成员x。将基类Base中数据成员x的访问权限改为protected时,出现错误“error C2248: x : cannot access private member declared in class Base”。在公有继承中,对象访问不能访问基类Base的保护成员x。在源程序的基础上,将派生类Derived的继承方式改为private时,出现错误“error C2248: x : cannot access private member declared in class Base”。在私有继承中,对象访问不能访问基类Base的公有成员x,setx(int i),getx( )。在源程序的基础上,将派生类Derived的继承方式改为protected时,出现错误“error C2248: x : cannot access private member declared in class Base”。在保护继承中,对象访问不能访问基类Base的公有成员x,setx(int i),getx( )。(二)编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。供参考的类结构如下:class Person.;class Student:public Person.;class Teacher:public Person.; (1)程序代码#include #include using namespace std;class personprivate:int no; string name; string ssex; int age;public:void input() coutnoname; coutssexage; void display() cout编号:noendl; cout姓名:nameendl; cout姓别:ssexendl; cout年龄:ageendl; ;class student:public personprivate:int bh,score; public:void get()input(); coutbhscore; void show() display(); cout班号:bhendl; cout成绩:scoreendl;class teacher:public personprivate:string zc,bm; public: void get() input(); coutzcbm; void show( ) display(); cout职称:zcendl; cout部门:bmendl;int main( )student s;teacher t; s.get( ); s.show( ); t.get( ); t.show( ); return 0;(2) 程序运行结果:(3) 程序分析这个程序主要是讲公有继承方式的派生类对基类成员的访问规则。在基类person中有四个私有成员no、name、ssex、age,两个公有函数input()、display()。在派生类Student和teacher中分别新增私有数据成员bh、score和zc、bm,公有成员函数get()、show( )。在两个派生类中调用input()、display()就能输出对象的编号、姓名、性别、年龄。(三)按要求阅读、编辑、编译、调试和运行以下程序。 (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()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;int main()MyArray a(5);a.Input();a.Display(显示已输入的);return 0;程序运行结果: (2) 声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。程序代码 #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 SortArray : public MyArray public: void Sort(); SortArray(int leng):MyArray(leng) coutSortArray类对象已创建。endl; virtual SortArray(); ;SortArray:SortArray()coutSortArray类对象被撤销。endl;void SortArray:Sort() for(int i=0;ilength;i+) for(int j=i;jlength;j+) if(alistjalisti) int m=alistj;alistj=alisti;alisti=m; int main()SortArray s(5);s.Input();s.Display(显示排序以前的);s.Sort();s.Display(显示排序以后的);return 0;程序运行结果:程序分析: 在程序中声明一个类SortArray继承类MyArray,继承方式为公有继承。若基类含有带参数的构造函数,在派生类中定义构造函数时,需缀上要调用的基类的构造函数及其参数,如本题中“SortArray(int leng):MyArray(leng)”。在程序功能上利用基类函数进行输入和输出数据,在派生类中定义一个函数,将输入的整数从小到大进行排序,再调用基类输出函数进行输出。(3) 声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。程序代码 #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()for(int i=0;ilength/2;i+)int m=alistlength-1-i;alistlength-1-i=alisti;alisti=m;int main()ReArray s(5);s.Input();s.Display(显示倒置以前的);s.reverse();s.Display(显示倒置以后的);return 0;程序运行结果:程序分析在程序中声明一个类ReArray继承类MyArray,继承方式为公有继承。当创建派生类对象时,首先执行基累的构造函数,随后执行派生类的构造函数,这可以从程序运行结果看出。在程序功能上利用基类函数进行输入和输出数据,在派生类中定义一个函数,将输入的整数进行倒置,再调用基类输出函数进行输出。(4) 声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。程序代码: #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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论