实验四 派生类与继承
【实验类型】验证性实验 【实验课时】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 \#include \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<<\对不起,创建失败。请重试。\ } }
MyArray::~MyArray() {
delete[] alist;
cout<<\数组被清空。\}
void MyArray::Display() // 显示数组内容 {
int i;
long int *p=alist;
for (i=0;i void MyArray::Input() // 从键盘若干整数 { cout<<\请输入:\个整数:\ int i; long int *p=alist; for(i=0;i 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