как создать множественную операторную перегрузку в объектно-ориентированном программировании на c ++, например, obj [10] = 3 с оператором [] и оператором = - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть определенный класс, и я хочу создать 2 оператора, которые будут работать вместе

как класс с массивом, и я хочу изменить определенный индекс в массиве

как этот объект [ 3] = 5

возможно ли это? если да, то как?

это код, который я сделал для оператора []


double Polynomial::operator[](int index) const {
    int maxT = this->currentMax;
    if (index > 0 && index < this->getDegree(false))
        return this->coefficients[index];
    cout << "overflow in index";
    system("pause");
}

1 Ответ

0 голосов
/ 23 апреля 2020

Ваш operator[] является методом const, поэтому его нельзя использовать для изменения членов. Если вы не хотите делать что-то необычное при присваивании элементу, вам не нужно немного operator=, когда ваш operator[] возвращает ссылку на элемент.

Как упоминалось в комментариях, проверка границ у operator[] нетипично. Учтите, что в oop каждый вызов operator[] будет выполнять проверку границ, даже если пользователь убедится, что используются только допустимые индексы. Это не совсем эффективно. Таким образом, в дополнение к вашему const оператору вы можете предоставить этот

double& Polynomial::operator[](size_t index)  {  // <-- no const
    return coefficients[index];
}

Если у вас также есть метод size, вы можете написать al oop:

for (size_t i=0; i< poly.size(); ++i) {
    poly[i] = i;
}

PS: system("pause") - это не- go, см. система («пауза»); - Почему это не так?

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