实验四 继承与派生讲解学习.docx
- 文档编号:26077574
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:12
- 大小:17.53KB
实验四 继承与派生讲解学习.docx
《实验四 继承与派生讲解学习.docx》由会员分享,可在线阅读,更多相关《实验四 继承与派生讲解学习.docx(12页珍藏版)》请在冰豆网上搜索。
实验四继承与派生讲解学习
实验四继承与派生
实验四 派生类与继承
【实验类型】验证性实验【实验课时】2学时
【实验目的】
(1)理解类的继承的概念,能够定义和使用类的继承关系。
(2)掌握派生类的声明与定义方法。
(3)熟悉公有派生和私有派生的访问特性。
(4)学习虚基类在解决二义性问题中的作用。
【实验环境】
硬件:
计算机
软件:
MicrosoftVisualC++6.0
【实验内容】
1、按要求阅读、编写、调试和运行以下程序。
(1)实验内容
①定义一个基类MyArray,基类中可以存放一组整数。
classMyArray
{public:
MyArray(intleng);
~MyArray();
voidInput();
voidDisplay();
protected:
longint*alist; //指向动态申请的一组空间
intlength;}; //整数的个数
基类中有构造函数、析构函数、输入数据和输出数据的函数。
②定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。
③定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。
④定义一个类AverArray继承自MyArray,在该类中定义函数Aver求解整数的平均值。
⑤定义NewArray类,同时继承了SortArray,ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转、和求平均值的功能。
在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。
(2)实验程序(参考)
程序如下:
#include"iostream.h"
#include"process.h"
classMyArray
{public:
MyArray(intleng);
~MyArray();
voidInput();
voidDisplay();
protected:
longint*alist; //指向动态申请的一组空间
intlength; //整数的个数
};
MyArray:
:
MyArray(intleng)
{ length=leng;
alist=newlongint[length];
if(alist==NULL)
{
cout<<"对不起,创建失败。
请重试。
";exit
(1);
}
}
MyArray:
:
~MyArray()
{
delete[]alist;
cout<<"数组被清空。
"< } voidMyArray: : Display() //显示数组内容 { inti; longint*p=alist; for(i=0;i cout<<""<<*p; } voidMyArray: : Input() //从键盘若干整数 { cout<<"请输入: "< "; inti; longint*p=alist; for(i=0;i cin>>*p; } classSortArray: virtualpublicMyArray { private: intlen; longint*sp; public: SortArray(intleng): MyArray(leng) { len=leng; Sort(); }; voidSort() { sp=newlongint[len]; longintq; sp=alist; for(inti=0;i { for(intj=0;j { if(*(sp+j)>*(sp+j+1)) { q=*(sp+j); *(sp+j)=*(sp+j+1); *(sp+j+1)=q; } } } } }; classReArray: virtualpublicMyArray { //这里是虚基类, public: voidReverse() { rp=newlongint[len]; longintq; rp=alist; for(inti=0;i { q=*(rp+i); *(rp+i)=*(rp+len-i-1); *(rp+len-i-1)=q; } } ReArray(intleng): MyArray(leng) { len=leng; Reverse(); } private: intlen; longint*rp; }; classAverArray: virtualpublicMyArray { // 这里是虚基类, public: doubleAver() { ap=newlongint[len]; doubleq=0; ap=alist; for(inti=0;i { q=q+*ap; ap++; } q=q/len; returnq; } AverArray(intleng): MyArray(leng) { len=leng; } private: intlen; longint*ap; }; classNewArray: publicReArray,publicSortArray,publicAverArray {public: NewArray(intleng); ~NewArray(); }; NewArray: : NewArray(intleng): MyArray(leng),SortArray(leng),ReArray(leng),AverArray(leng) { cout<<"\n新数组正在创建。 \n"; } NewArray: : ~NewArray() { cout<<"\n新数组已被清空。 \n"; } voidmain() { charb; intleng; do { cout<<"请输入数组长度: "< cin>>leng; while(leng<=0) { cout<<"数组长度必须为大于零的整数,请重新输入数组长度: \n";exit (1); cin>>leng; } cout<<"\n开始: \n"; NewArrayn(leng); n.Input(); cout<<"\n您输入的数组为: "< n.Display(); //显示数组 n.Reverse(); //显示逆序 cout<<"\n倒序数组为: "< n.Display(); //显示逆转以前的情况 cout<<"\n平均值是: "< n.Sort(); //排序 cout<<"\n排序后(从小到大)数组为: "< n.Display(); //显示排序以后的情况 cout<<"\n[A]继续 [Q]退出"< cin>>b; }while(b=='A'||b=='a'); } 执行结果为: 2、编写一个学生和教师数据输入和显示程序。 (1)实验内容 编写学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。 要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。 (2)实验程序(参考) #include classperson { protected: intm; charA[20]; char*name; public: voidinput() { cout<<"编号: "; cin>>m; cout<<"姓名: "; cin>>A; name=&A[0]; } voiddisplay() { cout<<"编号: "< cout<<"姓名: "< } }; classstudent: publicperson { protected: intclassnum,mark; public: voidinput1() { cout<<"输入一个学生数据: "< input(); cout<<"班号: "; cin>>classnum; cout<<"成绩: "; cin>>mark; } voiddisplay1() { cout<<"显示一个学生的数据: "< display(); cout<<"班号: "< cout<<"成绩: "< } }; classteacher: publicperson { protected: charzhicheng[20],bumen[20]; char*p; public: voidinput2() { cout<<"显示一个老师的数据: "< input(); cout<<"职称: "; cin>>zhicheng; cout<<"部门: "; cin>>bumen; } voiddisplay2() { cout<<"显示一个老师的数据: "< display(); p=&zhicheng[0]; cout<<"职称: "< p=&bumen[0]; cout<<"部门: "< } }; voidmain() { studentS; teacherT; S.input1(); T.input2(); S.display1(); T.display2(); } 【实验提示】 继承是面向对象程序设计的一个重要特性,它允许在已有类的基础上创建新的类,新类可以从一个或多个既有类中继承函数和数据,而且可以重新定义或加进新的数据和函数,从而形成类的层次或等级。 实验1中着重时在这方面进行练习,除了需要熟练掌握派生类的声明和定义,还需要灵活运用公有派生和私有派生来解决实际问题。 虚基类用于想把公共的基类只产生一个拷贝时,它的初始化与一般的多继承的初始化在语法上是一样的,但是构造函数的调用顺序不同。 C++编程中派生类可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。 以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。 C++语言中的技巧很多,需要熟练掌握,才能灵活运用。 【实验思考】 ①实验1中有何错误,应怎样修改? ②实验2中程序是否不简结,应如何修改或者你会如何设计程序? 【实验报告要求】 ①内容要求: ⅰ.实验题目 ⅱ.实验目的 ⅲ.实验过程(含程序代码) ⅳ.实验结果 ⅴ.实验思考题 ②验报告书写要整洁、有条理。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验四 继承与派生讲解学习 实验 继承 派生 讲解 学习