Перегрузка операторов в С++

Есть три класса Matrix - матрица, VectorRow - вектор строка и VectorColumn - вектор столбец. Если мы перемножим объекты vectorRow *= vectorColumn, то на выходе по законам природы у нас будет матрица. Можно ли перегрузить оператор *=, чтобы реализовать то что я описал? Т.е. что-то вроде Matrix operator*=(const VectorColumn& v1, const VectorRow& v2)?


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

Автор решения: Netch

Вы путаете два случая - operator* (умножение, которое даёт другой объект, чем аргументы) и operator*= (умножение, которое модифицирует аргументы). Если у вас тип результата другой, чем тип аргументов, *= уже не подходит.

Вы можете, безусловно, сделать

Matrix operator*(const VectorColumn& v1, const VectorRow& v2)

но это должен быть не метод класса, а отдельная функция. Вот в ней и будет умножение. Создайте в ней локальный объект Matrix, заполните и верните. Следует проследить, чтобы на этом возврате Matrix компилятор правильно отработал Return value optimization.

PS: рекомендую уточнить заголовок вопроса, сейчас он слишком невнятный.

→ Ссылка