Помогите закоментировать код

Ребят, кому не сложно, закоментируйте пожалуйста код программы, что бы мне проще было в ней разобраться. Спасибо! ps: прошу обьяснить, как работает каждая строчка кода (что делает), но это в идеале. Хотя бы блоки (какой блок и что делает).

#include <iostream>
#include <limits>
 
using std::endl;
using std::cout;
using std::pair;
using std::make_pair;
using std::numeric_limits;
 
template<typename T> class Matrix {
private:
    T * *matrix;
    size_t N, M;
public:
    Matrix(size_t _N, size_t _M) : N(_N), M(_M) {
        this->matrix = new T*[this->N];
        for (size_t i(0); i < this->N; i++) {
            this->matrix[i] = new T[this->M];
        }
    };
    T* operator[](const size_t index) { return this->matrix[index]; }
 
    friend std::ostream& operator<<(std::ostream &os, Matrix &obj) {
        for (size_t i(0); i < obj.N; i++) {
            for (size_t j(0); j < obj.M; j++) {
                os << obj[i][j];
                if (j + 1 != obj.M)
                    os << " ";
            }
            os << std::endl;
        }
        return os;
    }
 
    void getSaddlePoint() {
        T* min = new T[N];
        T* max = new T[M];
        for (size_t i = 0; i < N; i++)
        {
            min[i] = numeric_limits<T>::max();
            for (size_t j = 0; j < M; j++)
            {
                if (matrix[i][j] < min[i])
                {
                    min[i] = matrix[i][j];
                }
            }
        }
        for (size_t j = 0; j < M; j++)
        {
            max[j] = numeric_limits<T>::min();
            for (size_t i = 0; i < N; i++)
            {
                if (matrix[i][j] > max[j])
                {
                    max[j] = matrix[i][j];
                }
            }
        }
        cout << "Saddle point indexes" << endl;
        size_t k = 0;
        for (size_t i = 0; i < N; i++)
        {
            for (size_t j = 0; j < M; j++)
            {
                if (min[i] == max[j])
                {
                    cout << i << " " << j << endl;
                    k++;
                }
            }
        }
        if (!(k))
            cout << "not Saddle points!" << endl;
 
        delete[] min;
        delete[] max;
    }
    void GetQuadrant (int k,int p)
    {
        int first=0;
        int second=0;
        int third=0;
        int fourth=0;
        for (size_t i = 0; i < N; i++)
        {
            for (size_t j = 0; j < M; j++)
            {
                if (k<i && j<p)
                {
    first+=matrix[i][j];
                }
                if (k>i && j<p)
                {
                    first+=matrix[i][j];
                }
                if (k>i && j<p)
                {
    third+=matrix[i][j];
                }
                if (k>i && j>p)
                {
                    fourth+=matrix[i][j];
                }               
            }
        }
        if (first>=second && first>=third && first>=fourth)
        {
    cout<<first;
        }
        if (second>=first && second>=third && second>=fourth)
        {
    cout<<second;
        }
        if (third>=first && third>=second && third>=fourth)
        {
    cout<<third;
        }
        if (fourth>=first && third>=second && fourth>=third)
        {
    cout<<fourth;
        }                       
        
    }
 
 
    ~Matrix(void) {
        for (size_t i(0); i < this->N; i++)
            delete this->matrix[i];
        delete this->matrix;
    };
};
/*-------------------------------------------------------------------------*/
 
int main() {
    const size_t N2(4), M2(4);
    Matrix<int> matrix2(N2, M2);
    //in
    matrix2[0][0] = 2;
    matrix2[0][1] = 3;
    matrix2[0][2] = 5;
    matrix2[0][3] = 2;
    matrix2[1][0] = 2;
    matrix2[1][1] = 4;
    matrix2[1][2] = 6;
    matrix2[1][3] = 2;
    matrix2[2][0] = -2;
    matrix2[2][1] = 7;
    matrix2[2][2] = 2;
    matrix2[2][3] = 0;
    matrix2[3][0] = 1;
    matrix2[3][1] = 2;
    matrix2[3][2] = 5;
    matrix2[3][3] = 8;    
    //out
    cout << endl << matrix2 << endl;
    matrix2.getSaddlePoint();
    cout<<endl;
    matrix2.GetQuadrant(M2,2);
    cout<<endl;
    system("pause");
    return 0;
}

Ответы (2 шт):

Автор решения: Bloody.cpp

Для решения проблемы с комментированием кода - используйте нормальные IDE позволяющие это сделать. Например в visual studio закомментировать код можно сочетанием клавиш ctrl + k и после ctrl + c. Раскомментировать можно с помощью ctrl + k и после ctrl + u. (В версии 2019 это точно так)

Во втором случае: Лучше автора кода, никто не сможет его объяснить :). Если же вы не автор кода - постарайтесь разобраться в коде сами, что поможет вам узнать больше о C++ и избавить этот форум от таких просьб.

→ Ссылка
Автор решения: Алексей Обухов

Я бы вставил описание перед каждым полем и функцией, что они делают. Это хорошая практика.
T** matrix //массив массивов элементов с типом T
size_t N, M //кол-во строк и столбцов
T* operator[] //перегрузка оператора индекса, чтоб получать элемент матрицы m[i][j]
operator<< //для вывода матрицы в поток, например cout

А вот с методами посложнее:
getSaddlePoint() //поиск седлового элемента
GetQuadrant()//разбивают матрицу на 4 подматрицы (по строке и столбцу) и выводят максимальную сумму элементов сред них

Обращаю внимание, что в коде есть ошибки

→ Ссылка