写一个二维数组类 Array2

#include <iostream>
#include <cstring>
using namespace std;
class Array2{
private:
    int m, n;
    int** p;
public:
    Array2(int _m,int _n) 
    {
        m = _m;
        n = _n;
        p = new int*[m];
        for (int i = 0; i < m; i++)
        {
            p[i] = new int[n];
        }
    }
    Array2(){
        p = NULL;
    }
    Array2 &operator=(Array2 &array2){
        if (!p)
        {
            for (int i = 0; i < m; i++)
            {
                delete[] p[i];
            }
            delete[] p;
            m = array2.m;
            n = array2.n;
            p = new int*[m];
            for (int i = 0; i < m; i++)
            {
                p[i] = new int[n];
            }
        }
        else
        {
            m = array2.m;
            n = array2.n;
            p = new int*[m];
            for (int i = 0; i < m; i++)
            {
                p[i] = new int[n];
            }
        }
        for (int i = 0; i < m; i++)
        {
            memcpy(p[i], array2[i], n*sizeof(int));
        }
        return *this;
    }
    int *operator[](int i){
        return p[i];
    }
    int operator()(int i,int j){
        return p[i][j];
    }

};
int main() {
    Array2 a(3, 4);
    int i, j;
    for (i = 0; i < 3; ++i)
        for (j = 0; j < 4; j++)
            a[i][j] = i * 4 + j;
    for (i = 0; i < 3; ++i) {
        for (j = 0; j < 4; j++) {
            cout << a(i, j) << ",";
        }
        cout << endl;
    }
    cout << "next" << endl;
    Array2 b;     b = a;
    for (i = 0; i < 3; ++i) {
        for (j = 0; j < 4; j++) {
            cout << b[i][j] << ",";
        }
        cout << endl;
    }
    return 0;
}

 

posted on 2015-10-06 15:35  张茂晨  阅读(692)  评论(0编辑  收藏  举报