這個問題的會員和非會員提供了一個很好的答案,爲什麼定義運算符重載非成員:Operator overloading : member function vs. non-member function?運算符重載:當只有相同類型的對象可以參與
如果你定義操作重載函數作爲成員函數, 然後編譯器將諸如s1 + s2的表達式翻譯爲 s1.operator +(s2)。這意味着,操作符重載的成員函數 會在第一個操作數上被調用。這就是成員函數的工作方式!
但是如果第一個操作數不是類呢?如果我們想要在第一個操作數不是 類類型的情況下重載運算符,那麼存在一個主要問題 ,而是說雙重。所以你不能像這樣寫10.0 + s2。但是,您可以編寫運算符重載成員函數 表達式,如s1 + 10.0。
現在我有一種情況,我需要重載operator==
。就我而言,只有(a)與(b)類型相同的類型的對象進行比較。
是否有理由將operator==
定義爲非成員,還是應該將其作爲成員實現?
據你所知,只有相同類型的物體將被比較*今天*。你不知道未來。良好的風格是很好的風格。 –