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