运算符重载实现二维数组旋转

来源:互联网 发布:网络直播app多少钱 编辑:程序博客网 时间:2024/05/22 01:39
/*定义一个数组类 Array,实现二维数组的旋转。通过重载正号运算符“+”,顺时针旋转 90o,即使元素 b[i][j]变成 b[j][ M-1-i];通过重载负号运算符“-”,逆时针旋转 90o,即使元素 b[i][j]变成 b[M-1-j][i]。具体要求如下: (1)私有数据成员:     int b[M][M];    //数据成员,存放数组 (3) 公有成员函数:     Array(int (*p)[M]):构造函数,以形参初始化数据成员;     void operator +( ):重载函数,使数组顺时针旋转90o;     friend void operator -(Array &b):重载函数,使数组逆时针旋转90o;     void print():输出数据成员。 (4) 对所定义的类进行测试。要求输出原始数组和旋转之后的数组。 */#include<iostream>using namespace std;class arr{private:    int a[3][3],b[3][3];public:    arr(int(*p)[3]);    void operator + (int );    friend void operator - (arr &bb , int );    void print();};arr::arr(int (*p)[3]){    for (int i = 0; i < 3; i++)    {        for (int j = 0; j < 3; j++)        {            b[i][j] = *(*(p + i) + j);            a[i][j] = *(*(p + i) + j);        }    }}void arr::operator+(int n){    for (int i = 0; i < 3; i++)    {        for (int j = 0; j < 3; j++)        {            b[i][j] = a[j][2 - i];        }    }    this->print();}void operator - (arr &bb,int n){    for (int i = 0; i < 3; i++)    {        for (int j = 0; j < 3; j++)        {            bb.b[i][j] = bb.a[2 - j][i];        }    }    bb.print();}void arr::print(){    for (int i = 0; i < 3; i++)    {        for (int j = 0; j < 3; j++)        {            cout << b[i][j] << '\t';        }        cout << endl;    }}int main(){    int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };    int(*p)[3] = a;    arr arr1(p);    arr1.print();    cout << endl;    arr1 + 1;    cout << endl;    arr1 - 1;    cout << endl;    system("pause");    return 0;}
原创粉丝点击