虚基类的继承实例
定义一个基类MyArray,基类中可以存放一组整数的基础上定义类NewArray,同时继承了SortArray,ReArray和AverArray,使得类的对象同时具有排序、逆转、和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。#include"iostream"
using namespace std;
class MyArray
{
public:
MyArray(int leng);
~MyArray(){}
void Input();
void Display();
protected:
int *alist;
int length;
};
class AverArray:virtual public MyArray
{
public:
AverArray(int leng):MyArray(leng){}
~AverArray(){}
double ave();
};
class SortArray: virtual public MyArray
{
public:
~SortArray(){}
SortArray(int leng):MyArray(leng){}
void sort();
};
class ReArray:virtual public MyArray
{
public:
ReArray(int leng):MyArray(leng){}
~ReArray(){}
void reorder();
};
class NewArray:virtual public MyArray, virtual public AverArray,virtual public ReArray,virtual public SortArray
{
public:
~NewArray(){}
NewArray(int leng):MyArray(leng),AverArray(leng),ReArray(leng),SortArray(leng){}
} ;
int i,j;
MyArray::MyArray(int leng)
{
length=leng;
if(length>0)
{
alist=new int[length];
for(i=0;i<length;i++)
{
alist[i]=0;
}
}
else
alist=NULL;
}
void MyArray::Input()
{
cout<<"请输入数组:";
for(i=0;i<length;i++)
{
cin>>alist[i];
}
}
void MyArray::Display()
{
int flag=0;
if(flag==0)
{
cout<<"该数组为:";
flag=1;
}
else
cout<<"逆转序后的数组为:";
for(i=0;i<length;i++)
{
cout<<alist[i]<<"\t";
}
cout<<endl;
}
double AverArray::ave()
{
double sum=0,aver;
for(i=0;i<length;i++)
{
sum=sum+alist[i];
}
return sum/length;
}
void SortArray::sort()
{
int k,temp;
for(i=0;i<length;i++)
{
k=i;
for(j=k+1;j<length;j++)
if(alist[j]>alist[k])
{
k=j;
}
temp=alist[i];
alist[i]=alist[k];
alist[k]=temp;
}
}
void ReArray::reorder()
{
for(i=0,j=length-1;i<j;i++,j--)
{
alist[i]=alist[i]+alist[j];
alist[j]=alist[i]-alist[j];
alist[i]=alist[i]-alist[j];
}
}
int main()
{
NewArray n(5);
n.Input();
n.Display();
n.sort();
n.Display();
n.reorder();
n.Display();
cout<<"该组数据的平均值为:";
cout<<n.ave()<<endl;
return 0;
}