Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878

Как правильно перегрузить оператор [] =

02.07.2014, 18:39. Показов 4334. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот например в классе хранится массив, и допустим я хочу елементу массива в этом классе присвоить другое значение, тоесть так,
C++
1
2
class Var;
Var[] = 5;
или
C++
1
Var[6] = 10;
как правильно перегрузить оператор [] = чтобы так сделать??
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2014, 18:39
Ответы с готовыми решениями:

Как правильно перегрузить оператор для шаблона класса
Имеется такой шаблон: template<int Low = 0, int High = 1000> class Diapazon { }; Внутри него много всего, что уже работает,...

Как правильно перегрузить оператор умножения числа на матрицу?
У меня возникла такая проблема я не могу перезагрузить оператор умножения числа на матрицу, матрицу на число я умножил верно, а вот число...

Std::set с кастомным классом, как правильно перегрузить оператор < ?
Доброго времени суток, у меня имееться такой класс: class Truck { public: size_t getNumber(); Truck() =...

36
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 14:30
Студворк — интернет-сервис помощи студентам
Причём тут PHP? Это другой язык.

Перегрузить оператор "<<". Хотя если простой тип возвращает, то и так должно работать.
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 14:49  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Причём тут PHP? Это другой язык.
как причём? пхп написан же на с++

Цитата Сообщение от nmcf Посмотреть сообщение
Перегрузить оператор "<<". Хотя если простой тип возвращает, то и так должно работать.
а с перегрузкой проблемы, так оно не возвращает, потомучто функция [] возвращает ссылку, и если я пишу например
Var a;
a[1] = 8;
cout<<a[1];

то во время cout, обнуляется значение.

и как в даном случае правильно прегрузить оператор << я не знаю, я понимаю как перегрузить его для класса, но как для ссылки хз
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 15:10
пхп написан же на с++
Ну и что? Они никак не связаны.

Программу покажи. Так не ясно.
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 15:20  [ТС]
прикрепил файл
Вложения
Тип файла: zip file.zip (7.7 Кб, 4 просмотров)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 15:36
Так сделай
C++
1
ostream & operator << (ostream& out, const Var& cl){
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 15:39  [ТС]
у меня так и было, ток серовно неработает
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 16:20
Реализация Array мне не понятна. Что предполагается хранить в l_info? Указатель на динамический массив структур или на список? Вот это что вообще должно возвратить?
C++
1
2
3
4
5
6
7
8
9
10
Var & Array::operator [] (Var _value){
 
    L_info l_info = new Info;
    l_info->key = _value;
    l_info->Link = this->l_info;
    this->l_info = l_info;
    this->count_struct++;
    return l_info->value;
 
}
Почему Var в индексе? Как по нему искать-то?
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 16:58  [ТС]
Var - это класс-тип данных который хранит все типы, к нему обращаемся также как и к рбычному типу( int char и тд)

в l_info хранится адрес на следующею структуру(это реализация стека)

и сама фунуия возврвщает ссылку на адрес который который хранит данные типа Var, я через дебагер проверял, всё присваивает правильно, и если выводить через функцию void return_value_of_struct(void); тоже всё ок, хз только как вывести так cout<<a[1];
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 17:02
Т. е. у тебя каждый элемент стека это отдельный экземпляр Array?
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 17:32  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Т. е. у тебя каждый элемент стека это отдельный экземпляр Array?
эмм , непонял вопроса, если я правильно понял то ответ нет, класс хранит ссылку на отдельную структуру, структура на следующею структуру, и тд
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 17:43
Тогда где у тебя циклы для перемещения по цепочке структур?
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 17:45  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Тогда где у тебя циклы для перемещения по цепочке структур?
вот,

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Array::return_value_of_struct(void){
 
    if(this->l_info){
        L_info time_L_info;
        time_L_info = this->l_info;
        while(time_L_info){
            cout<<this->count_struct;
            cout<<"Key: "<<time_L_info->key;
            cout<<"  ";
            cout<<"Value: "<<time_L_info->value;
            cout<<"\n----------------------------------\n";
            time_L_info = time_L_info->Link;
        }
 
    }
 
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 17:46
А здесь?
C++
1
2
3
4
5
6
7
8
9
10
Var & Array::operator [] (Var _value){
 
    L_info l_info = new Info;
    l_info->key = _value;
    l_info->Link = this->l_info;
    this->l_info = l_info;
    this->count_struct++;
    return l_info->value;
 
}
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 17:55  [ТС]
сдесь я создаю новую структуру, присваиваю её переменной Link адрес перед идущей структуры, адрес но которую хранился в класе, а класс теперь указывает на адрес новосозданой, зачем тут циклы? + в конце возвращаю ссылку на переменную хранящию значение которое я изменяю
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 21:26
А при чём тут оператор []? Почему не += хотя бы?
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
07.07.2014, 22:14  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
А при чём тут оператор []? Почему не += хотя бы?
в php я могу так присвоить
arr[7] = 8;

и также вывести

echo( тотже cout)
echo arr[7]; //выведет 8

так же и тут хочу сделать для удобства
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
15.07.2014, 16:47  [ТС]
всё, проблему решил сам,

еще вопрос возник, а я вот написал готовый класс, сегодня узнал про то что такое юникод и wstring и wchar_t

решил что будет лучше если в класссе всё будет хранится в юникоде, мне теперь предётся в ручную всё переписывать( типы , функции и тд) или всё можно сделать как-то проще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2014, 16:47

Как перегрузить оператор<< и оператор>> ?
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу которвя мне помогла бы их решить. вопрос первый. В общем...

Как перегрузить оператор =
ну там чтоб он например сложение делал или чтото другое

Как перегрузить оператор?
Вот написал функцию поиска студента по номеру группы. STL list void find() { setlocale( LC_ALL,&quot;Russian&quot; ); if...

Как перегрузить оператор []?
вообщем есть класс class Point{ private: int color_id, state; public: //constructors Point(); //destructors ...

Как перегрузить оператор << в классе?
Всем привет, есть данный код: #include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &quot;ccolor.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru