刘小虎实验二_第1页
刘小虎实验二_第2页
刘小虎实验二_第3页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、实验2派生类与继承实验课程名:高级语言程序设计H专业班级: 12 网工 2班 学号: 201240420228姓名:刘小虎实验时间:4.20-5.5 实验 地点: K4-201指导教师:祁文青-.实验目的和要求(1) 掌握派生类的声明方法和派生类构造函数的定义方法。(2) 掌握不同继承方式下,基类成员在派生类中的访问属性。(3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4) 学习虚基类在解决二义性问题中的作用。2.2实验内容与步骤1. 输入下列程序。test4_1.cpp#in clude<iostream> using n amespace std;class

2、 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=”<<x<<endl;public:inty;int main()Derived bb;bb,setx(16); bb.sety(25);bb.show(); cout<<”Base:x=”<<bb.x<<

3、endl; cout<< ”Derived:y= ”<<bb.y<<endl; cout<<”Base:x=”<<bb.getx()<<endl; cout<< ”Derived:y= ”<<bb.gety()<<endl;return 0;(1) 写出程序的运行结果。(2) 按以下要求,对程序进行修改后再调试,指出调试中出错 的原因。 将基类 Base 中数据成员 x 的访问权限改为 private 时,会出 现哪些错误?为什么? 将基类Base中数据成员x的访问权限改为protect

4、ed时,会 出现哪些错误?为什么? 在源程序的基础上,将派生类Derived的继承方式改为private 时,会出现哪些错误?为什么? 在源程序的基础上,将派生类Derived的继承方式改为protected 时,会出现哪些错误?为什么?解答: 1.B&se = = x-16Ba.se : = x=16Dfitivcd: :y=25Ka.sc ; ; x-16Dcriued: :_y=25P012 4P4迪纯刘小虎实验二第一题Press finy kei to continue2. (1) 这2条语句错误coutvv ” Base:x= ” vvxvve ndl;coutvv ” Ba

5、se:x=” vvbb.xvve ndl;将基类Base中数据成员x的访问权限改为private后,它在 派生类中的访问属性变为不可访问的成员,因此在派生的 Derived类中不能访问数据成员X,以及也不能在派外直接引用。(2).这条语句错误 coutvv ”Base:x=” vvbb.xvvendl;将基类Base中数据成员x的访问权限改为protected后,经 过公用继承,它在派生类中的访问属性任然为protected,所以在派外不能用对象引用。(3) 以下语句会出错:bb.setx(16);coutvv"Base:x="vvbb.xvve ndl;coutvv&qu

6、ot;Base:x="vvbb.getx()vve ndl;将派生类Derived的继承方式改为private后,基类中的公有成员在派生类中访问属性都变为私有的, 所以在派外不能用对象 引用。(4)以下语句会出错:bb.setx(16);cout<<"Base:x="<<bb.x<<endl; cout<<"Base:x="<<bb.getx()<<endl;将派生类 Derived 的继承方式改为 protected 后,基类中的公 有成员在派生类中访问属性都变为保护的,

7、 所以在派外不能用对 象引用。2.编写一个学生和教师的数据输入和显示程序。学生数据有 编号、姓名、 性别、 年龄、系别和成绩, 教师数据有编号、 姓名、 性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输 入和显示设计成一个类Perso n,并作为学生类Stude nt和教师类Teacher的 基类。供参考的类结构如下:class Person;class Student:public Person;class Teacher:public Person;解答:程序如下 #include<iostream> #include<string> using names

8、pace std;class Personpublic:void get_value()cin>>num>>name>>sex>>age;void display()cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; cout<<"age:"<

9、<age<<endl;private:int num;string name;char sex;int age;class Student :public Personpublic:void get_value_1()cin>>xibie>>score;void display_1()cout<<"xibie:"<<xibie<<endl; cout<<"score:"<<score<<endl;private:string xibie;in

10、t score;class Teacher:public Personpublic:void get_value2()cin>>title>>bumen;void display_2()cout<<"title:"<<title<<endl;cout <<"bumen:"<<bumen<<endl;private:string title;string bumen;int main()int i,m,n;cin>>m>>n;Studen

11、t *stud=new Studentn;for(i=0;i<n;i+)studi.get_value(); studi.get_value_1(); studi.display();studi.display_1();Teacher * teach=new Teacher m;for(i=0;i<m;i+)teachi.get_value(); teachi.get_value2(); teachi.display();teachi.display_2();cout<<"201240420228,刘小虎"<<endl;return 0;

12、'C:Usrs.Admir strtorDesktopD?bngCppl exe'卩12S liuxiohu m 20 pisualj 1 97nun:28name: 1 iuxiaoliuage-2& MibzLB : j isuai Jzl score20 hmLuA n QEReacher Jlsuaij1 nun=30nane:buliuaA5ex:mage = 35title zteac tier bunen; jis u<ti ji 201240428228 刘小虎 Press 且n野 kei/ to centinue3按要求阅读、编辑、编译、调试和运

13、行以下程序。(1)阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。test4_3_1.cpp#in clude<iostream>#in cludevstri ng> using n amespace 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 len

14、gth”; exit(1);alist=new int leng; length=leng;if(alist=NULL)cout<< ”assign failure”; exit(1);”<<endl;cout<< ”MyArray 类对象已创建MyArray:MyArray()delete alist;cout<< ”MyArray 类对象被撤销。 ”<<endl;void MyArray:Display(string str)int i;int *p=alist;cout<<str<<length<&

15、lt; ”个整数:“;for(i=0;i<length;i+,p+)cout<<*p<< ”;”cout<<endl;void MyArray:Inputcout<< ”请键盘输入 ”<<length<< ”个整数 :”;int i;int *p =alist;for(i=0;i<length;i+,p+)cin>>*p;int main()MyArray a(5);a.Input();a.Display( “显示已输入的 ”;)return 0;(2) 声明一个类 SortArray 继承类 My

16、Array, 在该类中定义一 个函数,具有将输入的整数从小到大进行排序的功能。【提示】在第( 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:So

17、rt()/ 请自行编写 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);Virtu

18、al ReArray();请读者自行编写构造函数、析构函数和倒置函数ReArray,以及修改主函数。(3) 声明一个类 AverArray 继承类 MyArray, 在该类中定义一个函数,具有求输入的整数平均值的功能。提示】在第( 1)步的基础上增加下面的参考框架:class AverArray:public MyArrayPublic:AverArray(int leng);AverArray();Double Aver();请读者自行编写构造函数、 析构函数和求平均值函数 Ave(r 求 解整数的平均值) ,以及修改主函数。(2)声 明一个 NewArray 类,同时继承了类 SortAr

19、ray,ReArray 和 AverArray, 使得类 NewArray 的对象同时具有排序、倒置和 求平均值的功能。 在继承的过程中声明 MyArray 为虚基类, 体会虚基类在解决二义性问题中的作用。#include<iostream> #include<string> using namespace std; class MyArraypublic:MyArray(int leng);MyArray();void Input();void Display(string);protected: int*alist;int length;MyArray:MyArra

20、y(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 类对象已创建MyArray:MyArray()delete alist;cout<<"MyArray 类对象被撤销 "<<endl;"<<endl;void

21、MyArray:Display(string str) int i;int *p=alist;cout<<str<<length<<" 个整数: "for(i=0;i<length;i+,p+)cout<<*p;cout<<endl;void MyArray:Input()cout<<" 请键盘输入 "<<length<<" 个整数 :"int i;int *p =alist;for(i=0;i<length;i+,p+)cin

22、>>*p;class SortArray : public MyArraypublic:void Sort();SortArray(int leng):MyArray(leng)cout<<"SortArray 类对象已创建virtual SortArray();SortArray:SortArray()cout<<"SortArray 类对象被撤销void SortArray:Sort()int *a=alist;"<<endl;"<<endl;int i,j,temp;for(i=0;i&l

23、t;length-1;i+)for(j=0;j<length-i-1;j+) if(*(a+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(" 显示排序以后的 "); cout<<"201240420228, 刘小虎 "<<endl; return 0;* C:Use rs Admi ni

24、si rate rDe 5 kt opDe bugC ppl-exe"5 2 1:?7521:1257?AH41建创 co b象敝乔芻象被t .Jan即 扌数y 丄IL- rf 8 X e 丄冃启k Kp y 丿 ££ 0 yR陀 y raAr盘聾硼Arvas rt A- 2 t p s ArqllFne Hyso请显显 Mso眄"#include<iostream>#include<string>using namespace std;class MyArraypublic:MyArray(int leng);M yArray(

25、);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);"<<endl;"<<endl;cout<<"My

26、Array 类对象已创建。MyArray:MyArray()delete alist;cout<<"MyArray 类对象被撤销。void MyArray:Display(string str)int i;int *p=alist; cout<<str<<length<<" 个整数: " for(i=0;i<length;i+,p+) cout<<*p<<" "cout<<endl;void MyArray:Input()cout<<"

27、; 请键盘输入 "<<length<<" 个整数 :" int i;int *p =alist;for(i=0;i<length;i+,p+) cin>>*p;class ReArray : public MyArray public:void reverse();ReArray(int leng):MyArray(leng)cout<<"ReArray 类对象已创建。 "<<endl;virtual ReArray();ReArray:ReArray()"<&l

28、t;endl;cout<<"ReArray 类对象被撤销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);sn put();s.Display(”显示倒置以前的”);s.reverse();s.Display("显示倒置以后的”);cout«"201240420228,刘小虎&

29、quot;<<endl;return 0;#in clude<iostream>#in clude<stri ng> using n amespace std; class MyArraypublic:MyArray(i nt leng);MyArray();void Input();void Display(string);protected:int*alist;int length;MyArray:MyArray(int leng)if(leng<=0)cout<<"error length"exit(1);alis

30、t=new int leng; length=leng; if(alist=NULL) cout<<"assign failure"exit(1);"<<endl;"<<endl;cout<<"MyArray 类对象已创建。MyArray:MyArray()delete alist;cout<<"MyArray 类对象被撤销。void MyArray:Display(string str)int i;int *p=alist;cout<<str<<le

31、ngth<<" 个整数:for(i=0;i<length;i+,p+)cout<<*p<<" "cout<<endl;void MyArray:Input()cout<<" 请键盘输入 "<<length<<" 个整数 :"int i;int *p =alist;for(i=0;i<length;i+,p+)cin>>*p;class AverArray : public MyArraypublic:double Av

32、er();AverArray(int leng):MyArray(leng)cout<<"AverArray 类对象已创建。 "<<endl;virtual AverArray();AverArray:AverArray()cout<<"AverArray 类对象被撤销。 "<<endl;double AverArray:Aver()double m=0;for(int i=0;i<length;i+)m=alisti+m;cout<<" 显示 "<<len

33、gth<<" 个整数的平均值: " return m/length;int main()AverArray s(5);s.Input();s.Display(" 显示 ");cout<<s.Aver()<<endl;cout<<"201240420228 ,刘小虎 "<<endl;return 0;nwiii*站类对象已创建-类对象已创建。请键盘祗£个整熱佔24 3& 25 20显不百个整数;15 2-1 36 25 20 显示石木盪数的平均值;24 201

34、24042 022 fi,刘小羞AverArray类对象祓撇销°Tress 殖ny kcv to cont inue_#in clude<iostream>#in clude<stri ng> using n amespace std; class MyArraypublic:MyArray(i nt len g);MyArray();void In put();void Display(stri ng);protected:int len gth;MyArray:MyArray(int leng)if(leng<=0)cout<<"

35、;error length"exit(1);alist=new int leng;length=leng;if(alist=NULL)cout<<"assign failure"exit(1);"<<endl;cout<<"MyArray 类对象已创建。MyArray:MyArray()void MyArray:Display(string str)int i;int *p=alist;cout<<str<<length<<" 个整数:for(i=0;i<l

36、ength;i+,p+)cout<<*p<<" "cout<<endl;void MyArray:Input()个整数 :"cout<<" 请键盘输入 "<<length<<"int i;int *p =alist;for(i=0;i<length;i+,p+)cin>>*p;"<<endl;"<<endl;class SortArray :virtual public MyArray public:

37、void Sort();SortArray(int leng):MyArray(leng)cout<<"SortArray 类对象已创建。 virtual SortArray();SortArray:SortArray()cout<<"SortArray 类对象被撤销。 void SortArray:Sort()int i,j,temp;for(i=0;i<length-1;i+)for(j=0;j<length-i-1;j+)if(*(a+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)cout<<"ReArray 类对象已创建。 "<<endl;virtual ReArray();ReArray:ReArray()cout<<"ReArray 类对象被撤销。 "<<endl;void ReArray: reverse

温馨提示

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

评论

0/150

提交评论