Перегрузка [] и + одновременно - PullRequest
0 голосов
/ 30 мая 2020
• 1000 ] это значение.
int &operator[](int index)
{
    return array12[index];
}  

Но что мне нужно написать при перегрузке оператора +?

Как узнать индекс элемента при перегрузке +?

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Во-первых - обратите внимание на некоторую дезинформацию в вашем вопросе

  • A[index] + value - A Это имя класса, а не объект класса.
  • operator+ Этот оператор должен не обновлять значение, а возвращать ожидаемый результат копирования. Вы, наверное, имели ввиду operator+=.

На ваш вопрос

Перегрузка operator+= должна быть реализована в том типе, который содержится в вашем массиве. Например, если array12 содержит int, этот код будет работать так, как вы ожидали:

int main() {
    A a;
    /* ... Some a initialization ... */
    a[3] += 2;
    return EXIT_SUCCESS;
}

Предположим, ваш array12 содержит более сложный тип, например настраиваемый класс с именем B - Тогда надо перегрузить operator+= внутри B.

0 голосов
/ 30 мая 2020

Вы не можете напрямую перегружать оператор для решения этой проблемы, поскольку operator+ принимает только аргумент. Это невозможно:

void operator+(int idx, int num) // error: 2 parameters
{
    a[idx] += num;
}

Один из способов решить эту проблему - использовать член currentIndex и функцию установки. Например:

void setCurrentIndex(int idx)
{
   currentIndex = idx;
}

void operator+(int el)
{
    array12[currentIndex] += el;
}

//usage:
A a;
a.setCurrentIndex(0);
a + 1;

В качестве примечания, если вы определили operator[], вы можете напрямую добавить:

A a;
a[0] += 10;

Для этого потребуется дополнительный код, чтобы он работал, если основной тип - сложный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...