比较if语句中同一类的两个对象

时间:2014-12-16 04:14:37

标签: c++ object compare

如何使用if语句来比较C ++中同一个类的两个不同对象? " currentAnimation"和" animationSet [0]"都是"类动画的对象"

void setAnimation()
{
        //If object 1 doesn't equal object 2...
        if (currentAnimation != animationSet[0])
        //Make object 1 it equal object 2.
            currentAnimation = animationSet[0]; 
}

这是错误:

IntelliSense: no operator "!=" matches these operands
operand types are: animation != animation

这是指针的用途吗?

2 个答案:

答案 0 :(得分:3)

编译器不知道比较对象,因为它们是用户定义的数据类型。如果您想比较对象,则应该重载==!=个运算符。

看一下这个链接,

http://en.cppreference.com/w/cpp/language/operators

答案 1 :(得分:0)

这种情况可以是指针的用例。要将对象与指针进行比较,您应该更改此代码:

if (currentAnimation != animationSet[0])

到此:

if (&currentAnimation != &animationSet[0])

所以你将比较内存中的地址,这段代码必须编译。但是,这仅检查地址,而不是存储在其中的数据。比较地址适合您是否要检查是否指向同一对象。如果你想检查不同对象中的数据(数据是否相同?),你需要为你的类实现至少一个比较运算符(比较运算符通常应该在类外定义但是成为它的朋友才能访问它私人领域):

class animation
{
//your code
public:
    friend bool operator==(const animation & a1, const animation & a2);
    friend bool operator!=(const animation & a1, const animation & a2);
};

定义:

bool operator==(const animation & a1, const animation & a2)
{
    //the case we are pointing to the same object
    if(&a1 == &a2)
        return true;

    //here some code that compare fields of a1 and a2 and decide wether they are equal or not
}

bool operator!=(const animation & a1, const animation & a2)
{
    //we can use already defined operator==(), for example
    return !(a1 == a2);
}