实验目的和要求
- 理解类的继承的概念,能够定义和使用类的继承关系。
- 掌握派生类的声明与定义方法。
- 熟悉够有派生和私有派生的访问特性。
- 掌握虚基类在解决二义性问题中的作用。
实验内容:
- 定义一个存放一组整数的基类。
- 定义三个派生类,其中的成员函数分别实现排序、逆转、求解平均值的功能。
- 定义一个新的派生类,同时继承以上的三个派生类,继承过程使用虚基类。
代码
#include <iostream>
using namespace std;
class Myarray
{
protected:
int *alist; //指向动态申请的一组空间
int length; //整数的个数
public:
Myarray(int len) //初始化,动态申请存储空间
{
alist=new int[len];
length=len;
cout<<"Myarray 初始化..."<<endl;
}
~Myarray() //对象结束时,释放所占用的存储空间
{
delete(alist);
cout<<endl<<"再见!"<<endl;
}
void Input() //输入数据
{
int i;
for(i=0; i<length; i++)
{
cout<<"输入数组的第"<<i+1<<"个元素:";
cin>>alist[i];
}
}
void Display() //显示数据
{
cout<<endl<<"本数组成员依次为:";
for(int i=0; i<length; i++)
cout<<alist[i]<<' ';
cout<<endl;
}
};
class SortArray:virtual public Myarray //从小到大排序
{
public:
SortArray(int n):Myarray(n)
{
cout<<"SortArray 初始化..."<<endl;
}
void get_SortArray()
{
int i,j,k,temp;
for(i=0; i<length-1; i++)
{
k=i;
for(j=i+1; j<length; j++)
if(alist[j]<alist[k])
{
k=j;
}
temp=alist[i];
alist[i]=alist[k];
alist[k]=temp;
}
}
};
class ReArray: virtual public Myarray //前后逆转
{
public:
ReArray(int n):Myarray(n)
{
cout<<"ReArray 初始化..."<<endl;
}
void get_ReArray()
{
int i,t,j=length-1;
for(i=0; i<length/2; i++,j--)
{
t=alist[i];
alist[i]=alist[j];
alist[j]=t;
}
}
};
class AverArray:virtual public Myarray //求平均值
{
public:
AverArray(int n):Myarray(n)
{
cout<<"AverArray 初始化..."<<endl;
}
float get_AverArray()
{
float aver;
int sum=0,i;
for(i=0; i<length; i++)
sum+=alist[i];
aver=(float)sum/length;
return aver;
}
};
class NewArray:public SortArray,public ReArray,public AverArray
{
public:
NewArray(int n):SortArray(n),ReArray(n),AverArray(n),Myarray(n)
{
cout<<"NewArray 初始化..."<<endl;
}
void fun()
{
cout<<endl<<"数组成员的平均值为:";
cout<<AverArray::get_AverArray()<<' '<<endl;
cout<<endl<<"现在将数组成员进行前后逆转:"<<endl;
ReArray::get_ReArray();
Myarray::Display();
cout<<endl<<"现在将数组成员进行从小到大排序:"<<endl;
SortArray::get_SortArray();
Myarray::Display();
}
};
int main()
{
NewArray B(3);
B.Input();
B.Display();
B.fun();
}