给二维指针分配内存和[][]操作符的重载

来源:互联网 发布:淘宝内部券公众号 编辑:程序博客网 时间:2024/05/17 12:25
#include <iostream>#include <cstring>#include<memory.h>using namespace std; class Array2{private:int ** _array; /* 把二阶数组看成一阶数组,结果在两个[][]重载不行,所以换成指针的指针,ie.数组的数组。虽然从二维数组的角度看内存不连续。 */ int _row, _col;public:Array2(){_array = new int*[1];_array[0] = new int[1]; _row =1; _col = 1;//可以直接 Array2(1,1)? }Array2(int row, int col){//分两步申请内存。 _array = new int*[row];for(int i = 0;i<row; i++){_array[i] = new int[col];}_row = row; _col = col;}~Array2(){//指针的指针要从底层开始释放空间 for(int i=0;i<_row;i++){delete [] _array[i];}delete [] _array;}Array2 & operator = (Array2 & a){//先把原来的空间delete for(int i=0;i<_row;i++){delete [] _array[i];}delete [] _array;//在开一个和a一样大的空间。 _array = new int*[a._row];for(int i = 0;i<a._row; i++){_array[i] = new int[a._col];}_row = a._row; _col = a._col;//还有a数组里面的内容也要复制。for(int i=0;i<_row;i++)for(int j=0;j<_col;j++){_array[i][j] = a._array[i][j];}}int * operator[] (int index)//返回值是指针 {return _array[index];}int & operator () (int i, int j){return _array[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;}

0 0