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

再次感谢大家!

预先对所有主持人表示抱歉,您将讨厌我的问题。我尝试阅读这里的一些示例,但我没有理解。我明天有一个项目,这些是我遇到麻烦的重载操作员。教授说问题出在我的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;
}


以下是参考指南:

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

A == B

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

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

A!= B

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

据我了解,这段代码应该做到这一点。 VB不会标记任何警告或错误。在此先感谢您对我的IF语句出了什么问题的任何投入。

This is a picture of the Failed out put from the driver program

最佳答案

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);
}

关于c++ - C++中重载的==和!=运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34033379/

10-11 23:18
查看更多