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

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

09.01.2012, 23:13. Показов 5003. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru