оператор перегрузки + только для конкретного случая класса - PullRequest
0 голосов
/ 04 марта 2019

У меня есть class matrix, где я хочу перегрузить оператор +, но только если обе матрицы имеют одинаковое количество строк и столбцов.

class matrix
{
private:
    int rows, columns;
    double* data;
public:
    //things here: constructor, destructor etc.
    matrix operator+ (const matrix&) const;
};

Тогда я хочу добавить только две матрицыесли они имеют одинаковое количество строк и столбцов.Что я делаю сейчас:

matrix matrix::operator+(const matrix& adder) const
{
if(rows == adder.rows() && columns == adder.columns())
{
    matrix temporal;
    //Perform the addition
    return temporal;
}
else
    std::cout << "Unable to add matrices" << std::endl;
    //return an empty matrix of 0 rows, 0 columns.
}

Моя проблема в том, что я могу «добавить» любые две матрицы таким образом.Можно ли как-то перегрузить оператор только для случая, когда матрицы имеют одинаковый размер (и я получаю ошибку, когда пытаюсь скомпилировать добавление двух матриц, которые не могут быть добавлены)?

У меня естьта же проблема с использованием параметризованного конструктора, когда я хочу создать матрицу только с положительным числом строк и столбцов.До сих пор я объявляю конструктор с двумя целыми числами, и в случае, если я получаю неправильный ввод целых чисел, просто создаю пустую матрицу.Это вызывает ту же проблему, потому что мне разрешено «создавать» матрицу с отрицательными строками, но я не узнаю, пока не захочу использовать матрицу позже.

1 Ответ

0 голосов
/ 04 марта 2019

Можно ли каким-либо образом перегрузить оператор только для случая, когда матрицы имеют одинаковый размер (и получить ошибку, когда я пытаюсь скомпилировать добавление двух матриц, которые не могут быть добавлены)?

Ошибка времени компиляции не может быть сгенерирована для ошибки времени выполнения.

Вы можете сгенерировать ошибку времени компиляции, если вы хотите, чтобы размеры матрицы были известны во время компиляции.Это может быть достигнуто с помощью

template <size_t NUM_ROWS, size_t NUM_COLUMNS>
class matrix
{
   ...
};

Вам нужно будет выяснить, будут ли это соответствовать вашим требованиям.

...