10.定义一个数组类 Array,实现二维数组的旋转。通过重载正号运算符“+”,顺时针旋转 90°,即使元素b[i][j]变成 b[j][ M-1-i]; 通过重载负号运算符“-”,逆时针旋转 90°,即使元素 b[i][j]变成 b[M-1-j][i]。
- 私有数据成员:
- 公有成员函数:
- Array(int (*p)[M]):构造函数,以形参初始化数据成员;
- void operator +( ):重载函数,使数组顺时针旋转90o;
- friend void operator -(Array &b):重载函数,使数组逆时针旋转90o;
- void print():输出数据成员。
- 对所定义的类进行测试。要求输出原始数组和旋转之后的数组
int a[M][M]={1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7};
#include<iostream>
using namespace std;
#define M 4
class Array{
int b[M][M];
public:
Array(int (*p)[M]);
void operator+();
friend void operator-(Array &b);
void print();
};
Array::Array(int (*p)[M]){
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
b[i][j]=p[i][j];
}
}
}
void Array::operator+(){
int t[M][M];
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
t[i][j]=b[i][j];
}
}
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
b[i][j]=t[M-j-1][i];
}
}
}
void Array::print(){
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
cout<<b[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
void operator-(Array &b){
int t[M][M];
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
t[i][j]=b.b[i][j];
}
}
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
b.b[i][j]=t[j][M-i-1];
}
}
}
int main(){
int a[M][M]={1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7};
Array arr(a);
arr.print();
+arr;
arr.print();
-arr;
arr.print();
-arr;
arr.print();
return 0;
}