嗯,首先,如果你進入for
循環,並且條件&other == this
將不會被滿足,你將永遠不會返回任何東西。要解決這個問題,你應該刪除else
語句。如果other.Size == this->Size
條件未滿足,或者您已經完成了整個循環,並且沒有在其中使用return
,這將導致函數返回false。
第二個問題是行if(&other == this)
。我相信在循環內部你打算檢查字符串的所有符號。但是現在你只是檢查指向類本身的指針。要檢查字符,您需要使用類似if(other->data == this->data)
的東西,前提是您有一個data
成員,用於存儲......數據(對於重言式而言爲抱歉)。
另一個小流量是在設計中。你看,要檢查字符串是否等於,則需要查看每個字符並檢查它們是否匹配。但是,要證明字符串是而不是等於,則需要找到只有1對不匹配的字符。之後,繼續比較是沒有意義的。因此,最好將週期中的狀態改爲負值,以便在你找到一對不匹配的對之後立即停止比較,而不是對其他字符進行無用的比較。
通常,儘可能快地返回所有錯誤並避免不必要的合計是一種很好的做法。所以如果你可以通過一個簡單的檢查來檢查你的函數的開始,那麼最好這樣做。
所以,畢竟,你應該有這樣的事情:
bool MyString::operator==(const MyString& other)const
{
if(other.Size != this->Size)
return false;//If the sizes do not match, no need to check anything else. Just return false.
//If we are here, the sizes match. Lets check the characters.
for(int i = 0; i < this->Size+1; i++)
{
//If some pair doesnt match, the strings are not equal, and we exit.
if(other->data[i] != this->data[i])
return false;
}
//If we are here, all the characters did match, so we return true.
return true;
}
的循環似乎沒有比較對象的內容,只是重複地檢查,如果地址'other'和'this'是相同。 – hmjd 2012-07-17 14:31:51
嗯我甚至沒有意識到,謝謝。大小比較至少正確嗎?我對此有點不安。 – user1363061 2012-07-17 14:33:40
可能不是。如果你有一個等於'char s [Size]的數組,那麼它是不正確的,因爲數組索引從0開始,這意味着最後一個有效索引是'Size - 1'。 – hmjd 2012-07-17 14:34:52