Компилятор предупреждает вас, что coeficiente_*n.coeficiente_
и grado_*n.grado_
не действуют. Для того чтобы они имели эффект, результат должен быть присвоен чем-то. Для примера предположим тип int
;
int c = coeficiente_*n.coeficiente_;
int g = grado_*n.grado_;
форма оператора не выглядит правильно либо, учитывая OP и;
Clase a, b;
// initialise as required
c = a * b;
Умножение изменит a
и результат c
будет такой же, как a
; поскольку оператор, как указано, выглядит как метод-член, и результат возвращается ссылкой (this
). Возможно, это не намерение operator*
.
Есть two alternatives to this, укажите operator*
как функцию, не являющуюся членом (возможно, с разрешением friend
) или возвратите новый объект из метода-члена.
Clase operator*(Clase const & n) /*const*/
{
Clase result; // assumption is their is a default constructor for this example
result.coeficiente_ = coeficiente_ * n.coeficiente_;
result.grado_ = grado_ * n.grado_;
return result;
}
Способ элемент также может быть помечен как требуется const
/желательно.
Реализация, не являющееся членом, может выглядеть (я сохранил большую часть реализации для сравнения):
Clase operator*(Clase const & l, Clase const & r)
{
Clase result;
result.coeficiente_ = l.coeficiente_ * r.coeficiente_;
result.grado_ = l.grado_ * r.grado_;
return result;
}
Что неясно, о том, что предупреждение? Вам нужно хранить результаты умножений где-то, иначе есть _no effect_. –
Что вы ожидаете от умножения двух чисел вместе, кроме умножения двух чисел вместе? (запрет перегрузки оператора) – TartanLlama