过载==和!=C++中的运算符

Overloaded == and != operators in C++

本文关键字:运算符 过载 C++      更新时间:2023-10-16

我根据请求进行了一些更新,并添加了输出图片。再次感谢大家

再次感谢大家

我提前向所有的主持人道歉,你们会讨厌我的问题的。我试着阅读了这里的一些例子,但我没有得到。我明天要做一个项目,这些都是我遇到麻烦的超负荷操作员。教授说问题出在我的if语句中,但不会告诉我做错了什么。

    bool MyString::operator==(const MyString &right) const
{
    if (strlen(m_pString) != strlen(right.m_pString))
        {
            return false;
        }
    for (size_t i = 0; i < strlen(m_pString); ++i)
    {
        if (m_pString[i] == right.m_pString[i])
        {
            return false;
        }
    }
        return true;
}


bool MyString::operator!=(const MyString &right) const
{
    if (strlen(m_pString) != strlen(right.m_pString))
    {
        return false;
    }
    for (size_t i = 0; i < strlen(m_pString); ++i)
    {
        if (m_pString[i] != right.m_pString[i])
        {
            return false;
        }
    }
    return true;
}

以下是可供参考的指南:

重载的相等关系运算符(运算符==)

A==B

equal关系运算符用于确定两个MyString对象是否相等。这应该比较两个对象m_pString中的每个字符,以验证两个以null结尾的字符串是否相同。如果字符串相同,则应返回true;如果不相同,则返回false。

重载的不相等关系运算符(运算符!=)

A!=B

不相等关系运算符用于确定两个MyString对象是否不相等。这应该比较两个对象m_pString中的每个字符。当字符不匹配时,它应该立即返回true。如果字符串相同,则应返回false。

根据我的理解,这个代码应该做到这一点。VB没有标记任何警告或错误。提前感谢您对我的IF声明有什么问题的意见。

这是驱动程序中Failed out的图片

1.您正在比较m_pString的元素和right.m_pString的长度。

2.比较逻辑似乎是错误的。

bool MyString::operator==(const MyString &right) const
{
    if (strlen(m_pString) != strlen(right.m_pString))
    {
        return false;
    }
    for (size_t i = 0; i < strlen(m_pString); ++i)
    {
        if (m_pString[i] != right.m_pString[i]) 
        //               ~~ ~~~~~~~~~~~~~~~~~~
        {
            return false;
            //     ~~~~~
        }
    }
    return true;
    //     ~~~~
}

3.不要重复类似的逻辑。

bool MyString::operator!=(const MyString &right) const
{
    return !operator==(right);
}

if (m_pString[i] == strlen(right.m_pString))

应该是:

if (m_pString[i] == right.m_pString[i])

您正在将字符与字符串长度进行比较。

此外,在==实现中,如果m_pString[i] == right.m_pString[i],则不应该返回true。相反,您也需要继续检查所有其他字符,但如果它们是!=,则返回false。

您的!=实现中也存在类似的问题。

您的函数不仅不正确,而且无效,您多次调用strlen()

bool MyString::operator==(const MyString &right) const
{
    for (size_t i = 0; true; ++i)
    {
        if (m_pString[i] != right.m_pString[i] ) 
            return false;
        if (m_pString[i] == 0 )
            return true; 
    }
}