当前位置:  开发笔记 > 编程语言 > 正文

在C++中重载了==和!=运算符

如何解决《在C++中重载了==和!=运算符》经验,为你挑选了1个好方法。

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

再次感谢大家!

我很抱歉所有的主持人你会讨厌我的问题.我试过阅读这里的一些例子,但我没有得到它.我明天有一个项目,这些是我遇到问题的重载运营商.教授说问题出在我的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.

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

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

A!= B.

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

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

这是驱动程序失败的图片



1> songyuanyao..:

你在比较元素m_pString和长度right.m_pString.

比较逻辑似乎错了.

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有