Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
02.07.2014, 18:39     Как правильно перегрузить оператор [] = #1
вот например в классе хранится массив, и допустим я хочу елементу массива в этом классе присвоить другое значение, тоесть так,
C++
1
2
class Var;
Var[] = 5;
или
C++
1
Var[6] = 10;
как правильно перегрузить оператор [] = чтобы так сделать??
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2014, 18:39     Как правильно перегрузить оператор [] =
Посмотрите здесь:

как перегрузить оператор []? C++
C++ Как перегрузить оператор в виртуальном классе
Как перегрузить оператор = C++
C++ Как перегрузить оператор ввода?
C++ Как перегрузить оператор ввода из файла?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 14:30     Как правильно перегрузить оператор [] = #21
Причём тут PHP? Это другой язык.

Перегрузить оператор "<<". Хотя если простой тип возвращает, то и так должно работать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 14:49  [ТС]     Как правильно перегрузить оператор [] = #22
Цитата Сообщение от nmcf Посмотреть сообщение
Причём тут PHP? Это другой язык.
как причём? пхп написан же на с++

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

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

и как в даном случае правильно прегрузить оператор << я не знаю, я понимаю как перегрузить его для класса, но как для ссылки хз
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 15:10     Как правильно перегрузить оператор [] = #23
пхп написан же на с++
Ну и что? Они никак не связаны.

Программу покажи. Так не ясно.
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 15:20  [ТС]     Как правильно перегрузить оператор [] = #24
прикрепил файл
Вложения
Тип файла: zip file.zip (7.7 Кб, 3 просмотров)
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 15:36     Как правильно перегрузить оператор [] = #25
Так сделай
C++
1
ostream & operator << (ostream& out, const Var& cl){
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 15:39  [ТС]     Как правильно перегрузить оператор [] = #26
у меня так и было, ток серовно неработает
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 16:20     Как правильно перегрузить оператор [] = #27
Реализация 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 в индексе? Как по нему искать-то?
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 16:58  [ТС]     Как правильно перегрузить оператор [] = #28
Var - это класс-тип данных который хранит все типы, к нему обращаемся также как и к рбычному типу( int char и тд)

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

и сама фунуия возврвщает ссылку на адрес который который хранит данные типа Var, я через дебагер проверял, всё присваивает правильно, и если выводить через функцию void return_value_of_struct(void); тоже всё ок, хз только как вывести так cout<<a[1];
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 17:02     Как правильно перегрузить оператор [] = #29
Т. е. у тебя каждый элемент стека это отдельный экземпляр Array?
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 17:32  [ТС]     Как правильно перегрузить оператор [] = #30
Цитата Сообщение от nmcf Посмотреть сообщение
Т. е. у тебя каждый элемент стека это отдельный экземпляр Array?
эмм , непонял вопроса, если я правильно понял то ответ нет, класс хранит ссылку на отдельную структуру, структура на следующею структуру, и тд
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 17:43     Как правильно перегрузить оператор [] = #31
Тогда где у тебя циклы для перемещения по цепочке структур?
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 17:45  [ТС]     Как правильно перегрузить оператор [] = #32
Цитата Сообщение от 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;
        }
 
    }
 
}
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 17:46     Как правильно перегрузить оператор [] = #33
А здесь?
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;
 
}
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 17:55  [ТС]     Как правильно перегрузить оператор [] = #34
сдесь я создаю новую структуру, присваиваю её переменной Link адрес перед идущей структуры, адрес но которую хранился в класе, а класс теперь указывает на адрес новосозданой, зачем тут циклы? + в конце возвращаю ссылку на переменную хранящию значение которое я изменяю
nmcf
4316 / 3737 / 1260
Регистрация: 14.04.2014
Сообщений: 14,662
07.07.2014, 21:26     Как правильно перегрузить оператор [] = #35
А при чём тут оператор []? Почему не += хотя бы?
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
07.07.2014, 22:14  [ТС]     Как правильно перегрузить оператор [] = #36
Цитата Сообщение от nmcf Посмотреть сообщение
А при чём тут оператор []? Почему не += хотя бы?
в php я могу так присвоить
arr[7] = 8;

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

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

так же и тут хочу сделать для удобства
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2014, 16:47     Как правильно перегрузить оператор [] =
Еще ссылки по теме:

Как правильно перегрузить оператор для шаблона класса C++
C++ Как перегрузить оператор разыменования *
Как перегрузить оператор C++

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

Или воспользуйтесь поиском по форуму:
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 722
15.07.2014, 16:47  [ТС]     Как правильно перегрузить оператор [] = #37
всё, проблему решил сам,

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

решил что будет лучше если в класссе всё будет хранится в юникоде, мне теперь предётся в ручную всё переписывать( типы , функции и тд) или всё можно сделать как-то проще?
Yandex
Объявления
15.07.2014, 16:47     Как правильно перегрузить оператор [] =
Ответ Создать тему
Опции темы

Текущее время: 15:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru