#include <iostream>
#include <cmath>
#include <ctime>

class Matrix {
    int **ptr = nullptr;
    int x = NULL, y = NULL;
public:
    Matrix() = default;
    Matrix(int i, int j) :x(i), y(j)
    {
        ptr = new int*[x];
        for (int i = 0; i < x; i++)
            ptr[i] = new int[y];
    }
    Matrix(int i) :Matrix(i, i) {}
    Matrix(const Matrix &ob) : x(ob.x), y(ob.y)
    {
        //ўл¤Ґ«пҐ¬ Ї ¬пвм ¤«п Є®ЇЁЁ.
        ptr = new int*[ob.x];               
        for (int i = 0; i < ob.x; i++)
            ptr[i] = new int[ob.y];

        //Є®ЇЁагҐ¬.
        for (int i = 0; i < ob.x; i++)
            for (int j = 0; j < ob.y; j++)
                ptr[i][j] = ob.ptr[i][j];
    }
    Matrix& operator=(Matrix rhs);
    ~Matrix();

    void fill();
    void show();    
};

Matrix& Matrix::operator=(Matrix rhs)
{
    int tmp = x; x = rhs.x; rhs.x = tmp;
    tmp = y; y = rhs.y; rhs.y = tmp;
    int ** t = ptr; ptr = rhs.ptr; rhs.ptr = t;
    return *this;
}

Matrix::~Matrix()
{
    for (int i = 0; i < x; i++)
        delete[] ptr[i];
    delete[] ptr;
}

void Matrix::fill()
{
    std::srand(std::time(NULL));
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++)
            ptr[i][j] = rand() % 10;
    }
}

void Matrix::show()
{
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            std::cout << ptr[i][j] << ' ';
        } std::cout << std::endl;
    } std::cout << std::endl;
}

int main()
{   
    Matrix A(2), B;

    A.fill();
    A.show();

    B = A;

    std::cout << std::endl;
    B.show();

    return 0;
}