Перегрузка операторов в С++
Есть три класса Matrix - матрица, VectorRow - вектор строка и VectorColumn - вектор столбец. Если мы перемножим объекты vectorRow *= vectorColumn, то на выходе по законам природы у нас будет матрица. Можно ли перегрузить оператор *=, чтобы реализовать то что я описал? Т.е. что-то вроде Matrix operator*=(const VectorColumn& v1, const VectorRow& v2)?
Ответы (1 шт):
Вы путаете два случая - operator* (умножение, которое даёт другой объект, чем аргументы) и operator*= (умножение, которое модифицирует аргументы). Если у вас тип результата другой, чем тип аргументов, *= уже не подходит.
Вы можете, безусловно, сделать
Matrix operator*(const VectorColumn& v1, const VectorRow& v2)
но это должен быть не метод класса, а отдельная функция. Вот в ней и будет умножение. Создайте в ней локальный объект Matrix, заполните и верните. Следует проследить, чтобы на этом возврате Matrix компилятор правильно отработал Return value optimization.
PS: рекомендую уточнить заголовок вопроса, сейчас он слишком невнятный.