Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/27: Рейтинг темы: голосов - 27, средняя оценка - 5.00
-9 / 1 / 2
Регистрация: 08.10.2011
Сообщений: 44

Перегрузка оператора []

09.01.2012, 23:13. Показов 5024. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При перегрузке оператора возникли проблемы, подскажыте как правильно перегрузить этот оператор, чтоб можно было устанавливать и получать значение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Vektor {
    private :
        int* element;
        int size;
        Vektor () {};
    public :
        Vektor (int Size) : size(Size) {element = new int[size];};
        ~Vektor () {size = 0; if(element) delete[] element; };
 
        int operator [] (int index) {
            return this->element[index];
        }
 
                      //Сдесь ошыбка
        void operator [] (int index, int value) {
            this->element[index] = value;
        }
 
};
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2012, 23:13
Ответы с готовыми решениями:

Перегрузка оператора ^
Здравствуйте! Необходимо перегрузить бинарный оператор ^ для транспонирования матрицы. Есть класс матрицы: template <class T> ...

Перегрузка оператора +
Всем привет, проблема на этот раз такая. Для того, чтобы выучить классы, я пишу некое подобие класса string. Сложность вот в чем. Возникла...

Перегрузка оператора '='
Не давно стал изучать С++ и дошёл до перегрузок операторов, и с книги написал пример, и не могу в полной мере его понять, объясните...

7
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
09.01.2012, 23:31
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Vektor {
        private :
                int* element;
                int size;
        public :
                Vektor (int Size) : size(Size) {element = new int[size];};
                ~Vektor () { delete[] element; };
 
                int& operator [] (int index) {
                        return element[index];
                }
 
                const int& operator [] (int index) const {
                        return element[index];
                }
 
};
3
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
09.01.2012, 23:35
Ссылкой.
Вот как-то так.
C++
1
2
3
4
// один для обычных контекстов
int &operator[](size_t index) { return element[index]; }
// и один для константных контекстов
const int &operator[](size_t index) const { return element[index]; }
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
09.01.2012, 23:47

Не по теме:

C++
1
 //Сдесь ошыбка
Ага, в слове "сдесь" :D


Ваша ошибка была в том что Вы хотели перегрузить оператор [] чтобы он принимал два аргумента, а делать это нельзя. Стандарт гласит что перегружать мы можем почти все операторы, но мы не можем менять количество аргументов что они принимают. Если хотите перегрузить оператор скобки и чтобы он принимал несколько аргументов то перегрузите оператор () - ему можно задать сколько угодно аргументов да и выглядит тоже вполне неплохо, пример:
C++
1
cout<<a(2,3);
1
-9 / 1 / 2
Регистрация: 08.10.2011
Сообщений: 44
09.01.2012, 23:47  [ТС]
Спасибо уважаемые форумчане, все оказалось очень просто.
0
09.01.2012, 23:55

Не по теме:

Gepar, мне "ы" в "ошыбка" не меньше глаз режет...

1
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
10.01.2012, 00:04
rangerx, а поч. ссылка константная?
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
10.01.2012, 00:21
Цитата Сообщение от OstapBender Посмотреть сообщение
а поч. ссылка константная?
Для константного контекста. Без конст. вар. функц. след. код не скомпилир.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class A {
 public:
  A() : data_(new int[10]) {}
  ~A() { delete [] data_; }
  int &operator[](int index) { return data_[index]; }
// константный вариант функции
//  const int &operator[](int index) const { return data_[index]; }
 private:
  A(const A &);
  A &operator=(const A&);
  int *data_;
};
 
int main(int argc, char *argv[]) {
  A simple;
  simple[0] = 0;
  const A constant; // константный объект
  // Без const int &operator[](int) const ошибка
  // GCC error: passing 'const A' as 'this' argument of 'int& A::operator[](int)' discards qualifiers
  std::cout << constant[0];
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2012, 00:21
Помогаю со студенческими работами здесь

Перегрузка оператора <<
Добрый пень! подскажите как написать код для реалилизации следующего требования: SpecialPrint &lt;&lt; &quot;text&quot; &lt;&lt;...

Перегрузка оператора <<
Вот упрощенный вариант моей программы, пересчитывает время в 12-й формат мне нужно перегрузить оператор &lt;&lt; так, чтобы ...

Перегрузка оператора
Имеется код: #include &lt;iostream&gt; class X { public: int a; int b; int operator+(int a) {

Перегрузка оператора <
У меня 2 файла . Przedzial.h и Przedzial.cpp В первом только класс и названия метод и т.д. Во втором описание. Przedzial.h ...

Перегрузка оператора []
У меня есть класс Przedzial (Интервал) с приватными переменными double low и double up И нужно перегрузить оператор для случая ob ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru