实验四 继承与派生 下载本文

实验四 派生类与继承

【实验类型】验证性实验 【实验课时】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>*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