自定义二维数组,运算符重载

第四周程序填空题3

总时间限制: 1000ms 内存限制: 65536kB

描述

写一个二维数组类 Array2,使得下面程序的输出结果是:

0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
#include <iostream>
#include <cstring>
using namespace std;

class Array2 {
	int** p;
	int n,m;
	public:
	Array2(int a=0,int b=0){
		n=a;m=b;
		if(!a||!b) p=NULL;
		else {
			p=new int* [a];
			for(int i=0;i<a;i++){
				p[i]=new int[b];
				memset(p[i],0,b*sizeof(int));
			}
		}
	}
	~Array2(){
		for(int i=0;i<n;i++)
			delete []p[i];
		delete []p;
	}
	Array2 & operator =(const Array2 &x){
		if(&x==this) return *this;
		if(p!=NULL){
			for(int i=0;i<n;i++)
				delete []p[i];
			delete []p;
		}
		n=x.n;m=x.m;
		p=new int* [x.n];
		for(int i=0;i<x.n;i++){
			p[i]=new int [x.m];
			memcpy(p[i],x.p[i],x.m*sizeof(int));
		}
		return *this;
	}
	int operator ()(int a,int b){return p[a][b];}
	int* operator [](int x){return p[x];}
// 在此处补充你的代码
};

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;
}

评论

还没有任何评论,你来说两句吧

发表评论

衫小寨 出品