好吧,首先,如果你进入for
循环,并且条件&other == this
不会被满足,你将永远不会返回任何东西。要解决此问题,您应该删除该else
语句。other.Size == this->Size
如果条件不满足,或者您已经完成了整个循环并且没有在其中使用,这将导致您的函数返回 false return
。
第二个问题是线路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;
}