运算符问题==

时间:2009-12-07 13:44:14

标签: c++ operators equals-operator

我在以下c ++程序中使用operator ==时遇到了一些问题。

#include < iostream>
using namespace std;

class A
{
    public:
        A(char *b)
        {
            a = b;
        }
        A(A &c)
        {
            a = c.a;
        }
        bool operator ==(A &other)
        {
            return strcmp(a, other.a);
        }
    private:
        char *a;
};


int main()
{
    A obj("test");
    A obj1("test1");

    if(obj1 == A("test1"))
    {
        cout<<"This is true"<<endl;
    }
}

if(obj1 == A("test1"))行有什么问题?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:34)

当字符串相等时,

strcmp返回0,因此您需要:

return strcmp(a, other.a) == 0;

你也应该使用像CătălinPitiş这样的const引用在他的回答中说,因为那时你可以使用临时对象与操作符,你也应该自己创建方法const(因为它没有正如Andreas Brinck在下面的评论中所说,不要修改对象。所以你的方法应该是:

bool operator ==(const A &other) const
{
        return strcmp(a, other.a) == 0;
}

答案 1 :(得分:3)

bool operator ==( const A &other)

使用const引用,因此在if语句中构造的临时对象可以用作operator ==的参数。

答案 2 :(得分:2)

在我看来,您希望在运营商中使用此功能:

strcmp(a, other.a) == 0

strcmp在字符串匹配时返回0,并且数字指示比较是否大于或小于其他。

答案 3 :(得分:-1)

您的错误是您创建了一个即时值并将其作为对operator==方法的引用传递。但是您的错误在您的运算符定义中应该是:

bool operator ==(const A&amp; other)const

身体是一样的。