2014-09-27 7 views
0

Я хочу перегрузить оператор *, чтобы делать умножения между моим объектом и двойными типами/тем же типом объекта. Я перегружен оператор дваждыПерегрузка оператора - перегрузка *

Rational operator*(const Rational&) const; 
Rational operator*(double) const; 

Первый охватывает случай t1 * t2;

Второй охватывает корпус t1 * 3.8474;

Но я хочу покрыть третий случай как -лада 3.8474 * t1;

Как это сделать? Мой разум говорит мне, что для этого мне нужно перегрузить оператор двойного типа *, но я не знаю, возможно ли это?

+0

Вы бы перегрузили версию оператора, не являющуюся членом. Так или иначе, я бы сделал это во всех случаях. –

+0

@ DietmarKühl Помните, что вы имеете в виду? –

ответ

1

Вы можете сделать 3.8474 * t1 от перегрузки глобальной operator*():

Rational operator*(double, const Rational&); 

В общем, я обычно перегружать операторы с глобальными функциями, а не с функциями-членами. Например, функции-члены, которые у вас есть, могут быть эквивалентно реализованы со следующими глобальными функциями:

Rational operator*(const Rational&, const Rational&); 
Rational operator*(const Rational&, double); 
+0

О, так это как определение правой и левой стороны оператора *? так что это как «глобальный» оператор для всех типов? –

+0

@ Tugal.44 «global» означает, что функция не находится внутри класса или пространства имен. Это позволяет вам больше контролировать как левую, так и правую сторону оператора, да. –

Смежные вопросы