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

Перегрузка оператора "++" - C++

Восстановить пароль Регистрация
 
iFree
2 / 2 / 0
Регистрация: 11.10.2010
Сообщений: 35
29.03.2011, 22:00     Перегрузка оператора "++" #1
У меня есть класс, организованный принципом односвязного списка. Я хочу перегрузить оператор ++ так, чтобы он каждый раз возвращал адрес каждого следующего элемента.
Вот к примеру мой класс:

C++
1
2
3
4
5
6
7
8
class test 
{ 
// .............
 
public: 
test *pn;
//..................
};
C++
1
2
3
4
void main()
{ test *temp,*head; // предположим у меня уже есть целый список этих объектов, где head - адрес самого "первого". 
temp=head;
do { cout<<temp; temp=temp->pn; } while(temp);  // У меня перегружен оператор << который просто выводит в поток вывода.
Хочу заменить строку temp=temp->pn строкой ++temp; Можно ли это сделать и как?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
/*Alexander*/
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
29.03.2011, 22:56     Перегрузка оператора "++" #2
C++
1
2
3
4
5
6
7
8
9
class test 
{ 
// .............
 
public: 
test *pn;
test operator++();
//..................
};
C++
1
2
3
4
test test::operator()
{
return *this->pn;
}

C++
1
2
3
4
void main()
{ test *temp,*head; // предположим у меня уже есть целый список этих объектов, где head - адрес самого "первого". 
temp=head;
do { cout<<temp; temp=++temp; } while(temp);
iFree
2 / 2 / 0
Регистрация: 11.10.2010
Сообщений: 35
29.03.2011, 23:23  [ТС]     Перегрузка оператора "++" #3
Экспериментировал на простейшем примере:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream.h>
#include <conio.h>
#include <string.h>
 
class test {
int a;
 
public:
test *pn;
test operator++();
test()
{
cout<<"Input:"<<endl;
cin>>a;
}
 
 
friend ostream& operator<<(ostream&,test*);
};
 
 
test test::operator++()
{
return *this->pn;
}
 
ostream& operator<<(ostream& out,test* da)
{
out<<da->a;
return out;
}
 
 
typedef test T;
void main()
{ T *temp,*head;
head=new T;   
temp=new T;
 
head->pn=temp;
 
cout<<head; 
head=++head;
cout<<head;
cout<<temp;
 
 
getch();
 
}
Допустим ввожу 2, потом 4... выводит 2, 0.. не хочет переходить почему-то на адрес следующего.
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
29.03.2011, 23:45     Перегрузка оператора "++" #4
а зачем вам это нужно, для перебора всех элементов?


по моему тут ошибка
C++
1
2
3
4
test test::operator()
{
return *this->pn; // надо this->pn
}
вообще перебор списка обычно делают так

C++
1
for(Class* c=start_item;c;c=c->next)
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
30.03.2011, 00:16     Перегрузка оператора "++" #5
из-за того, что невнимательно прочитал код в начале, сидел почти час - разбирался почему же у вас не работает ничего)))
head=++head;
вы же просто делаете инкремент адреса, соответственно, ваш перегруженный метод не вызывается. Всего лишь нужно было сделать так (в рамках простого примера)
C++
1
*head = ++(*head);
и всё заработает)
/*Alexander*/
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
30.03.2011, 01:07     Перегрузка оператора "++" #6
Я не разу не писал обьект как уазатель,, да ещё этот код не запускал а VC. ))
Взял предьявленный код и подставил нужное действие)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.03.2011, 11:10     Перегрузка оператора "++" #7
По хорошему, нужно осталять только
C++
1
++(*head);
без присваивания. Всё таки это инкремент. И определить постфиксную форму ещё.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2011, 22:17     Перегрузка оператора "++"
Еще ссылки по теме:

Перегрузка оператора "++" и "--" , компилирует, но при запуске программы - ошибка C++
Класс "Матрица". Перегрузка оператора "минус" C++
Перегрузка оператора "+", чтобы выполнял "*" C++

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

Или воспользуйтесь поиском по форуму:
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
30.03.2011, 22:17     Перегрузка оператора "++" #8
тоже так подумал, но придётся тогда по другому переопределять оператор.
Yandex
Объявления
30.03.2011, 22:17     Перегрузка оператора "++"
Ответ Создать тему
Опции темы

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