实验内容:
//定义NewArray类,同时继承类sortArray,ReArray,ReveArray,使得类NewArray的对象具有顺序,逆转,和求平均值的功能。
//在继承的过程中继承虚基类,体会虚基类在解决二义性问题中的作用
#include <iostream>
using namespace std;
class MyArray{
protected:
int length;
int *A;
public:
MyArray(int leng);
~MyArray();
void input();
void display();
};
class sortArray:virtual public MyArray//这里是虚基类,为了在NewArray的继承中没有二义性
{ public:
void sort();
sortArray (int leng):MyArray(leng)
{ cout<<"This is sortAraay created!"<<endl;}
~sortArray()
{ cout<<"sort....."<<endl;}
};
class ReArray:virtual public MyArray
{ public:
void reverse();
ReArray (int leng):MyArray(leng)
{ cout<<"This is ReAraay created!"<<endl;}
~ReArray()
{ cout<<"Re....."<<endl;}
};
class AverArray:virtual public MyArray
{ public:
double aver();
AverArray (int leng):MyArray(leng)
{ cout<<"This is AverAraay created!"<<endl;}
~AverArray()
{ cout<<"Aver....."<<endl;}
};
class NewArray: public sortArray,public ReArray,public AverArray
{ public:
NewArray(int leng);
~NewArray();
};
void sortArray::sort()//排序
{ int t,i,j;
for(i=0;i<length-1;i++)
for(j=0;j<length-1-i;j++)
{ if(A[j]>A[j+1])
{ t=A[j];
A[j]=A[j+1];
A[j+1]=t;
}
}
}
void ReArray::reverse()//逆转
{ int t,i;
for(i=0;i<length/2;i++)
{ t=A[i];
A[i]=A[length-1-i];
A[length-1-i]=t;
}
}
double AverArray::aver()//求平均值
{ double sum=0;
for(int i=0;i<length;i++)
{ sum=sum+A[i];
}
return sum/length;
}
NewArray::NewArray( int leng):MyArray( leng),sortArray(leng),ReArray(leng),AverArray(leng)
{
cout<<"This is NewAraay created!"<<endl;
}
NewArray::~NewArray()
{ cout<<"New......"<<endl;}
MyArray::MyArray(int leng)//基类构造函数
{ if(leng<=0)
{ cout<<"error length"<<endl;}
A=new int[leng];
length=leng;
if(A==NULL)
{ cout<<"assign failure"<<endl;}
cout<<"MyArray created!"<<endl;
}
MyArray::~MyArray()//基类析构函数
{ delete []A;
cout<<"......"<<endl;
}
void MyArray::input()
{ cout<<"please input length:"<<length<<endl;
int i;
int *p;
p=&A[0];
for(i=0;i<length;i++,p++)
{ cin>>*p; }
}
void MyArray::display()//基类中显示数组
{ int *p;//这里也可以写成int *p;p=&A[0];
p=&A[0];
for(int i=0;i<length;i++,p++)
{ cout<<*p<<" "; }
cout<<endl;
}
int main()
{ NewArray n(5);
n.input();
n.display();
n.sort();
n.display();
n.reverse();
n.display();
n.aver();
cout<<n.aver()<<endl;
return 0;
}
运行结果: