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