Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 818
#1

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

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

вот например в классе хранится массив, и допустим я хочу елементу массива в этом классе присвоить другое значение, тоесть так,
C++
1
2
class Var;
Var[] = 5;
или
C++
1
Var[6] = 10;
как правильно перегрузить оператор [] = чтобы так сделать??
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2014, 18:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно перегрузить оператор [] = (C++):

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

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

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

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

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

Как перегрузить оператор ввода? - C++
Как перегрузить оператор ввода? rational.h #define _Rational_h_ #include &lt;iostream&gt; using namespace std; int nod(int p,...

36
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 818
02.07.2014, 22:53  [ТС] #16
DrOffset, ахренеть, ты гений))))

еще тут вопрос возник

взять допустим эту функцию

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
Var  & Var::operator /= (const double& i){
    
    if(this->num != INT_MIN){
         this->dnum = (double)this->num/i;
         this->num = INT_MIN;
    }else if(this->dnum != DBL_MIN){
         this->dnum/=i;
    }
    return *this;
}
фунция должна возвращать ссылку на значение(тоесть адрес), а мы возвращаем *this - это само значение(не адрес), почему оно тогда работает?
0
DrOffset
7506 / 4502 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
02.07.2014, 23:22 #17
Цитата Сообщение от mh-coder Посмотреть сообщение
фунция должна возвращать ссылку на значение(тоесть адрес), а мы возвращаем *this - это само значение(не адрес), почему оно тогда работает?
Ссылка - это не адрес в общем случае. Адрес - это указатель.
Чтобы объяснить эту концепцию придется поднять определенный пласт знаний, который может быть велик для одного поста. Поэтому объясню проще.
Можно сказать, что ссылка представляет собой другое имя для объекта. Главная мысль, что ссылка, будучи раз инициализированной, неотрывно связана с оригинальным объектом и изменения происходящие с ней отражается на оригинальном объекте. Так что пока жив объект, который представляет this, ссылка будет верна.

То, что в некоторых случаях она может быть реализована через адрес объекта и неявное разыменование - это уже деталь реализации. Для понимания концепции это не столь важно.
Ну можно еще тут почитать.
0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 818
07.07.2014, 14:09  [ТС] #18
тут такой вопрос появился, а вот если я хочу присваивать значения так

class Var;
Var[] = 5;

тогда мне как я поимаю нужно перегрузить оператор скобок с войдом

Var & operator [] (void);

но так ругается студия, почему и как правильно?
0
nmcf
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
07.07.2014, 14:18 #19
С пустыми скобками нельзя.
0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 818
07.07.2014, 14:25  [ТС] #20
Цитата Сообщение от nmcf Посмотреть сообщение
С пустыми скобками нельзя.
как, совсем нельзя? а как в php сделали что там можно?

и еще вопрос, как сделать чтобы значения можно было так выводить

cout<<my_array[2];
0
nmcf
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
07.07.2014, 14:30 #21
Причём тут PHP? Это другой язык.

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

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

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

и как в даном случае правильно прегрузить оператор << я не знаю, я понимаю как перегрузить его для класса, но как для ссылки хз
0
nmcf
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
07.07.2014, 15:10 #23
пхп написан же на с++
Ну и что? Они никак не связаны.

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

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

и сама фунуия возврвщает ссылку на адрес который который хранит данные типа Var, я через дебагер проверял, всё присваивает правильно, и если выводить через функцию void return_value_of_struct(void); тоже всё ок, хз только как вывести так cout<<a[1];
0
nmcf
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
07.07.2014, 17:02 #29
Т. е. у тебя каждый элемент стека это отдельный экземпляр Array?
0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 818
07.07.2014, 17:32  [ТС] #30
Цитата Сообщение от nmcf Посмотреть сообщение
Т. е. у тебя каждый элемент стека это отдельный экземпляр Array?
эмм , непонял вопроса, если я правильно понял то ответ нет, класс хранит ссылку на отдельную структуру, структура на следующею структуру, и тд
0
07.07.2014, 17:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2014, 17:32
Привет! Вот еще темы с ответами:

Как перегрузить оператор разыменования * - C++
Как перегрузить оператор разыменования?

Как перегрузить оператор ввода из файла? - C++
Допустим у нас есть класс: class A {friend ifstream &amp;operator&gt;&gt;(ifstream &amp;, A &amp;); private: char a; char b; ...

Как перегрузить оператор в виртуальном классе - C++
Помогите пожалста разобраться с перегрузкой операторов в абстрактных классах!!!! Есть чисто виртуальный класс физических величин ...

Как перегрузить оператор [] для двумерного массива? - C++
Здравствуйте! Есть класс матрица, где в приватном доступе есть Type** matrix. Как из тела программы(т.е. вне класса) изменить значение...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.