自定义二维数组,运算符重载
第四周程序填空题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;
}
发表评论