如果你重載二元運算符作爲成員函數,那麼它應該只需要一個論據。第一個操作數是操作員被調用的對象(即*this
);第二個操作數是單個函數參數。
struct names {
//...
// better to pass by reference;
// make the function 'const' so it can be used on constant objects
bool operator==(names const & rhs) const {
return this->fname == rhs.lname;
}
};
或者,可以過載它作爲一個非成員函數,使用兩個參數:
bool operator==(names const & lhs, names const & rhs) {
return lhs.fname == rhs.lname;
}
如果需要訪問私有成員(不是在該示例的情況下),那麼它必須是一個朋友。您可以在類定義中定義好友;在這種情況下,代碼看起來與您的示例完全相同,僅在函數聲明前面有friend
。
(當然,這不是平等的合理定義,因爲它不是對稱的,許多算法將打破,如果你能有a == b
但不b==a
,你可以用這個定義。lhs.fname == rhs.fname && lhs.lname == rhs.lname
會更有意義。)
你正在做重載作爲非靜態成員函數,所以它已經有了一個隱含的對象參數。 – 2014-09-11 07:32:47
使其成爲非會員。 – juanchopanza 2014-09-11 07:33:09
最好不要以價值觀來論證它的論點。 – 2014-09-11 07:34:11