嗯,首先,如果你进入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