Opened 3 years ago

Closed 3 years ago

#326 closed ожидается проверка (задача сдана)

HW#07

Reported by: Daniil Lyubaev Owned by: Святослав Власов
Component: WW Matrix Version: 3.0
Keywords: Cc:

Description

Вроде как все функции реализованы и даже работают.
Если пытаться делать матрице += через +, то получается, что деструктор подчищает ту память (после выхода из operator+), на которую мы кидаем указатель. Попытался это обойти в лабе, выглядит как костыль. Так же ощущение, что кода много и задача решается короче. Как всё это можно подправить?

Change History (6)

comment:1 Changed 3 years ago by Daniil Lyubaev

Upd.: Сильно поправил код, выглядит получше.

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

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

Реализовать + через += -- это отличная идея! Ты молодец, что догадался. Дополнительного вызова деструктора не случится, потому что сработает NRVO, я вкратце про него упоминал на последнем занятии, на следующем расскажу еще раз.

  1. Не работает + и -. Тест
    > init a 2 2
    > set a 0 0 1
    > set a 0 1 2
    > + a a
    

выдает неверный результат

  1. const у методов не расставлены
  2. operator== имеет риск залезть не в свою память, подумай когда это может произойти и исправь
  3. Хочется увидеть assert'ы в тех местах, где операция имеет риск упасть, например когда размеры матриц не соответствуют друг другу https://en.cppreference.com/w/cpp/error/assert
Last edited 3 years ago by Святослав Власов (previous) (diff)

comment:3 Changed 3 years ago by Daniil Lyubaev

Type: ожидаются исправленияожидается проверка
Version: 1.02.0
  1. Умножение тоже не работало, видимо в процессе горы переписываний кривовато сделал, сейчас всё работает.
  2. Расставил.
  3. Сделал обработку на неравенство размеров.
  4. Сделал.

Насколько плохим решением будет сделать using namespace std::size_t, чтоб не писать постоянно std::size_t, а просто делать size_t? Он там довольно много раз фигурирует ведь.

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

Type: ожидается проверкаожидаются исправления
  1. Теперь у тебя умножение перестало работать, а еще валгринд ругается на ошибкиk
    init a 2 1
    init b 1 2
    set a 0 0 1
    set a 1 0 2
    set b 0 0 3
    set b 0 1 4
    
    * a b
    3 6 
    6 0 
    
  2. По прежнему не вижу константность у методов https://emkn.ru/attachments/classes/file_wVD3Q1zl/lect09.pdf слайд 13.

comment:5 Changed 3 years ago by Daniil Lyubaev

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

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

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

У операторов +, -, * не хватает const, они ведь не меняют текущий объект.
В остальном всё ок, 9.5/10

Note: See TracTickets for help on using tickets.