2014-09-27 185 views
0

我想重載*運算符在我的對象和double類型/同一對象類型之間進行乘法運算。 我重載操作兩次運算符重載 - 重載*

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

第一個涵蓋了T1 T2 *的情況;

第二種情況是t1 * 3.8474;

但是我想覆蓋第三種情況:3.8474 * t1;

我該怎麼做?我的頭腦告訴我,爲了做到這一點,我需要重載double類型*運算符,但我不知道是否有可能?

+0

您會重載操作符的非成員版本。無論如何,我會在所有情況下做到這一點。 – 2014-09-27 01:12:53

+0

@DietmarKühl介紹你的意思? – 2014-09-27 01:13:36

回答

1

您可以通過重載全球operator*()3.8474 * t1

Rational operator*(double, const Rational&); 

一般情況下,我通常全局函數,而不是成員函數重載運算符。例如,您擁有的成員函數可以等效地實現以下全局函數:

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

哦,這就像定義*運算符的右側和左側一樣?所以它就像所有類型的「全局」運算符一樣? – 2014-09-27 01:33:25

+0

@ Tugal.44「全局」表示該函數不在類或名稱空間內。這可以讓您更好地控制操作員的左側和右側,是的。 – 2014-09-27 03:07:05