数组索引运算符已重载。现在无法使用比较运算符

时间:2014-12-06 22:13:47

标签: c++ overloading

我重载了数组下标([])运算符。我已经使它返回一个整数,因为我不会将它用于任何赋值目的。但是,我现在无法使用比较运算符!

这是代码

class Set
{
public:
    virtual int operator[](int i) = 0;
    virtual int size() = 0;

    void union_operation(Set* second);
    void interesction_operation(Set* second);

};

void Set::union_operation(Set* second)
{
    int second_size = second->size();
    for(int i=0;i<second_size;i++)
    {
        for(int j=0;j<this->size();j++)
        {
            //The line below doesnt work!
            if(this[j]==second[i])
            {
                break;
            }
        }

    }
}

运算符重载的实现是在派生类中执行的。

由于重载运算符将返回一个整数,因此比较在两个整数之间,这是完全有效的。为什么这一行仍然会出错?

1 个答案:

答案 0 :(得分:0)

在C ++中,this是一个需要解除引用才能使用它的指针。除非你将它传递给函数当然。

因此,为了使您的比较有效,它应如下所示:

if((*this)[j] == (*second)[i])
{
    break;
}

编辑:second也是Set指针,因此您必须取消引用它才能使用它。