Change History (6)

comment:1 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления
  1. Не нужно смешивать кодстайл, когда открывающая фигурная скобка остается на той же строке и когда она переносится на следующую. Выбери один из вариантов и используй его.

Либо

if (...) {
  ...
}

либо

if (...)
{
  ...
}
  1. Подумай, как можно выделить память под матрицу за меньшее количество вызовов new (за два или даже один)
  2. Писать this-> каждый раз когда ты хочешь вызвать метод у того же объекта, избыточно. Можно просто вызывать метод по имени, он по умолчанию вызывается у this.
  3. А такая запись !this->operator==(m) вообще за гранью добра и зла :) Можно просто написать !(*this == m)
  4. Вот так писать тоже некрасиво:
    for (size_t i = 0; i < _rows; i++)
        for (size_t j = 0; j < _cols; j++)
        {
            if (op == '+')
                _data[i][j] += m._data[i][j];
            else
                if (op == '-')
                    _data[i][j] -= m._data[i][j];
        }
    

Во всех адекватных стайлгайдах опускать фигурные скобки допустимо только когда тело цикла или условия -- это одна единственная строчка, а когда строк несколько, нужно их заключать в фигурные скобки. Т.е. вот так писать можно:

if (...)
  return 0;

А вот так нельзя:

if (...)
  if (...)
    return 0;

Вместо этого пишется

if (...) {
  if (...)
    return 0;
}
  1. В операторе присваивания проверяя на самоприсваивание ты вызываешь оператор == с аргументами по значению, т.е. у тебя вызывается operator==, который сравнит матрицы поэлементно, а это совершенно не нужно. Достаточно сравнить указатели.
  2. Идея с eval_operator и eval_op_assign хорошая, только я бы не рекомендовал использовать символьные литералы ('+', '-'), вместо этого лучше в приватной области видимости завести enum с константами PLUS, MINUS и использовать их.

comment:2 Changed 3 years ago by Святослав Власов

Upd:
Хочется увидеть ассерты в тех местах, где программа может упасть (например когда размеры матриц не подходят друг к другу)

comment:3 Changed 3 years ago by Маргарита Михельсон

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:4 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Всё ок, кроме одного -- в операторе *= у тебя лишний раз вызовется оператор присваивания: сначала создастся временный объект, куда запишется результат умножения матриц, а затем этот временный объект через оператор присваивания будет скопирован в *this. Давай ты попробуешь от этого избыточного копирования избавиться.

9/10 пока.

comment:5 Changed 3 years ago by Маргарита Михельсон

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:6 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

10/10

Note: See TracTickets for help on using tickets.