Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Перегрузка оператора []
Перегрузка оператора []
позволяет обработать доступ к элементу по индексу, причем индекс может быть не только целочисленным. При перегрузке оператора []
через единственный параметр в «операторном» методе доступен индекс, расположенный внутри квадратных скобок. Внутри метода ко всем членам класса можно обращаться напрямую или через указатель this
. Чтобы можно было присвоить значение элементу, расположенному по указанному индексу, необходимо внутри метода возвратить ссылку на элемент. Обратите внимание на то, что перегрузить оператор []
с помощью дружественной или обычной функции нельзя. Пример перегрузки оператора []
приведен в листинге 14.6.
Листинг 14.6. Перегрузка оператора []
#include <iostream>
#include <process.h>
class C {
static const int size_ = 2;
int arr_[size_];
public:
C() { arr_[0] = 0; arr_[1] = 0; }
C(int x, int y) { arr_[0] = x; arr_[1] = y; }
int &operator[](int i);
// Индекс может быть любого типа, например, строкой
void operator[](const char *s) {
std::cout << s << std::endl;
}
};
int main() {
C obj1, obj2(30, 40);
obj1[0] = 10;
obj1[1] = 20;
std::cout << obj1[0] << std::endl; // 10
std::cout << (obj1[1] + obj2[0]) << std::endl; // 50
obj1["string"]; // string
// Доступ через указатель
C *pObj = new C(5, 8);
// pObj[0] = 3; // Ошибка!
(*pObj)[0] = 3; // OK
std::cout << (*pObj)[0] << std::endl; // 3
std::cout << (*pObj)[1] << std::endl; // 8
delete pObj;
return 0;
}
int &C::operator[](int i) {
if (i < 0 || i >= size_) { // Проверка выхода за границы массива
std::cout << "Error" << std::endl;
exit(1);
}
return arr_[i];
}
[]
через указатель на объект не забудьте предварительно выполнить разыменование указателя.Реквизиты
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов