@newmersedez

Что должен вернуть метод класса матрицы?

Пишу класс квадратной матрицы, вот, собственно, сам класс:
matrix.h
#ifndef MATRIX_H
#define MATRIX_H

#include <string.h>

class Matrix
{
private:
    std::string name;
    double      **matrix;
    int         size;
public:
    // Default constructor
    Matrix() : name("NaN"), matrix(nullptr), size(0)
    { }

    // Constructor with values
    Matrix(std::string nm, int sz) : name(nm), size(sz)
    {
        try 
        {
            matrix = new double *[size];
            for(int i = 0; i < size; i++)
                matrix[i] = new double[size];
        }
        catch(std::bad_alloc& ex)
        {
            std::cerr << ex.what() << std::endl;
        }
    }

    // Arithmetic shit
    bool    operator== (const Matrix &operand);
    bool    operator!= (const Matrix &operand);
    Matrix  operator+(const Matrix &operand);
};

#endif

matrix.cpp
#include <iostream>
#include "matrix.h"

/*  return 1 if ==
    return 0 if !=*/
bool Matrix::operator== (const Matrix &operand)
{
    if(operand.size != this->size)
        return 0;
    for(int i = 0; i < this->size; i++)
    {
        if(this->matrix[i][i] != operand.matrix[i][i])
            return 0;
    }
    return 1;
}

/*  return 1 if !=
    return 0 if ==*/
bool Matrix::operator!= (const Matrix &operand)
{
    if(operand.size != this->size)
        return 1;
    for(int i = 0; i < this->size; i++)
    {
        if(this->matrix[i][i] != operand.matrix[i][i])
            return 1;
    }
    return 0;
}

Matrix Matrix::operator+ (const Matrix &operand)
{
    const Matrix result;
    //pass
}


Мой вопрос по оператору сложения. Этот метод возвращает объект класса. Складывать мы можем только матрицы одного порядка. Если, к примеру, матрицы разного порядка, или же через обработчик исключений я поймаю плохое выделение памяти, то что должен вернуть этот метод, если операция не может быть произведена?
nullptr же мы не можем вернуть.
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
1. В вашем коде нет деструктора, который бы освобождал память => у вас потенциальная утечка памяти.
2. В случае оператора сложения, если матрицы имеют разный размер выбрасывайте исключение через std::runtime_error
3. У вас отсутсвует конструктор копирования и при копировании объекта будет копироваться указатель на выделенную память.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы