- 定义一个数组类MyArray作为基类,其数据成员为int* alist,length,要有构造函数和析构函数,有数据的输入和显示功能。
- 定义一个派生类SortArray,实现排序功能。
- 定义一个派生类ReArray,实现逆转功能。
- 定义一个派生类AverArray,实现计算数组元素平均值的功能。
- 定义一个派生类NewArray,实现数组的排序、逆转、计算数组元素平均值的功能。
#include <iostream>
using namespace std;
class MyArray
{
protected:
int length;
int * alist;
public:
MyArry()
{
length=0;
alist=NULL;
}
~MyArray()
{
if(alist!=NULL)
delete [] alist;
}
void input()
{
cin>>length;
alist=new int[length];
for(int i=0;i<length;i++)
cin>>alist[i];
}
void output()
{
for(int i=0;i<length;i++)
cout<<alist[i]<<" ";
cout<<endl;
}
};
class SortArray:virtual public MyArray
{
public:
void sort()
{
for(int i=0;i<length-1;i++)
for(int j=0;j<length-1-i;j++)
if(alist[j]>alist[j+1])
{
int t=alist[j];
alist[j]=alist[j+1];
alist[j+1]=t;
}
}
};
class ReArray:virtual public MyArray
{
public:
void change()
{
int t;
for(int i=0;i<length/2;i++)
{
t=alist[i];
alist[i]=alist[length-1-i];
alist[length-1-i]=t;
}
}
};
class AverArray:virtual public MyArray
{
public:
void aver()
{
int s=0;
for(int i=0;i<length;i++)
s=s+alist[i];
cout<<s/length<<endl;
}
};
class NewArray:public SortArray,public ReArray,public AverArray{};
int main()
{
cout<<"1--------:"<<endl;
SortArray m;
m.input();
m.sort();
m.output();
cout<<"2--------:"<<endl;
ReArray n;
n.input();
n.change();
n.output();
cout<<"3--------:"<<endl;
AverArray x;
x.input();
x.aver();
cout<<"4--------:"<<endl;
NewArray y;
y.input();
y.sort();
y.output();
y.change();
y.output();
y.aver();
return 0;
}
结果:
注:派生类从基类接收成员(不包括构造函数和析构函数),并增加成员,实现对对基类功能的扩展,派生类可以使用基类的public成员和protected成员,但private成员不能直接使用。多重继承时为避免二义性,应当采用虚拟继承,消除派生类成员的名字冲突。