实验四 继承与派生讲解学习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四继承与派生
实验四派生类与继承
【实验类型】验证性实验【实验课时】2学时
【实验目的】
(1)理解类的继承的概念,能够定义和使用类的继承关系。
(2)掌握派生类的声明与定义方法。
(3)熟悉公有派生和私有派生的访问特性。
(4)学习虚基类在解决二义性问题中的作用。
【实验环境】
硬件:计算机
软件:Microsoft Visual C++ 6.0
【实验内容】
1、按要求阅读、编写、调试和运行以下程序。
(1)实验内容
①定义一个基类MyArray,基类中可以存放一组整数。
class MyArray
{public:
MyArray(int leng);
~MyArray();
void Input();
void Display();
protected:
long int *alist; // 指向动态申请的一组空间
int length;}; // 整数的个数
基类中有构造函数、析构函数、输入数据和输出数据的函数。
②定义一个类SortArray继承自MyArray ,在该类中定义函数实现排序功能。
③定义一个类ReArray继承自MyArray ,在该类中定义函数实现逆转功能。
④定义一个类AverArray继承自MyArray ,在该类中定义函数Aver求解整数的平均值。
⑤定义NewArray类,同时继承了SortArray, ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转、和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。
(2)实验程序 (参考)
程序如下:
#include "iostream.h"
#include "process.h"
class MyArray
{public:
MyArray(int leng);
~MyArray();
void Input();
void Display();
protected:
long int *alist; // 指向动态申请的一组空间
int length; // 整数的个数
};
MyArray::MyArray(int leng)
{ length=leng;
alist=new long int[length];
if(alist==NULL)
{
cout<<"对不起,创建失败。请重试。
";exit(1);
}
}
MyArray::~MyArray()
{
delete[] alist;
cout<<"数组被清空。"< } void MyArray::Display() // 显示数组内容 { int i; long int *p=alist; for (i=0;i cout<<" "<<*p; } void MyArray::Input() // 从键盘若干整数{ cout<<"请输入:"< int i; long int *p=alist; for(i=0;i cin>>*p; } class SortArray: virtual public MyArray { private: int len; long int *sp; public: SortArray(int leng):MyArray(leng) { len=leng; Sort(); }; void Sort() { sp=new long int[len]; long int q; sp=alist; for(int i=0;i { for(int j=0;j { if(*(sp+j)>*(sp+j+1)) { q=*(sp+j); *(sp+j)=*(sp+j+1); *(sp+j+1)=q; } } } } }; class ReArray: virtual public MyArray { // 这里是虚基类, public: void Reverse() { rp=new long int[len]; long int q; rp=alist; for(int i=0;i { q=*(rp+i); *(rp+i)=*(rp+len-i-1); *(rp+len-i-1)=q; } } ReArray(int leng):MyArray(leng) { len=leng; Reverse(); } private: int len; long int *rp; }; class AverArray:virtual public MyArray { // 这里是虚基类, public: double Aver() { ap=new long int[len]; double q=0; ap=alist;