Оператор индекса массива перегружен. Теперь нельзя использовать оператор сравнения

0

Я перегрузил оператор индекса строки ([]). Я заставляю его возвращать целое число, поскольку я не буду использовать его для каких-либо целей назначения. Однако я не могу использовать оператор сравнения сейчас!

Вот код

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

    }
}

Реализация перегрузки оператора выполняется в производном классе.

Так как перегруженный оператор возвращает целое число, поэтому сравнение выполняется между двумя целыми числами, что совершенно справедливо. Почему эта строка все еще дает ошибку?

  • 3
    (*this)[j]==(*second)[i] PS: Вы должны взять этот параметр по ссылке
  • 0
    Это работает!! Большое спасибо!
Теги:
overloading

1 ответ

0
Лучший ответ

В C++ this указатель, который требует разыменования, прежде чем вы сможете его использовать. Если вы, конечно, не передаете его функции.

Итак, для того, чтобы ваше сравнение работало, оно должно выглядеть следующим образом:

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

EDIT: second также является указателем Set поэтому вы должны разыгрывать его, чтобы использовать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню