运算符重载(填空题)
描述
写一个二维数组类 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 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,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
样例输入
None
样例输出
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 {
// 在此处补充你的代码
private:
int* p;
int x;
int y;
public:
Array2(){
p = NULL;
x = 0;
y = 0;//用xy代替size存储起到了用一维存储二维的效果
}//无参构造
Array2(int r, int c):x(r),y(c){
p = new int[x*y];
}//有参构造
Array2 & operator=(const Array2 & a){
if(!a.p){
p = NULL;
return *this;
}
if(p)
delete [] p;
x = a.x;
y = a.y;
p = new int[x*y];
memcpy(p, a.p, sizeof(int)*x*y);//这个函数
return *this;
}//数组类之间复制
~Array2(){delete [] p;}//析构函数
int * operator[](int i){
return (p+i*y);//注意是i*y
}
int& operator()(int i, int j){
return p[i*4+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;
}