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

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

Войти
Регистрация
Восстановить пароль
 
iFree
2 / 2 / 0
Регистрация: 11.10.2010
Сообщений: 35
#1

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

29.03.2011, 22:00. Просмотров 638. Ответов 7
Метки нет (Все метки)

У меня есть класс, организованный принципом односвязного списка. Я хочу перегрузить оператор ++ так, чтобы он каждый раз возвращал адрес каждого следующего элемента.
Вот к примеру мой класс:

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; Можно ли это сделать и как?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2011, 22:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора "++" (C++):

Перегрузка оператора "++" и "--" в чем может быть причина нарушение прав доступа? - C++
Вот такой вот код #include &lt;iostream&gt; class d { private: int size ; char *n; public: d()

Перегрузка оператора "++" и "--" , компилирует, но при запуске программы - ошибка - C++
#include &lt;iostream&gt; #include&lt;ctime&gt; #include&lt;stdio.h&gt; #include&lt;locale.h&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; ...

Класс "Матрица". Перегрузка оператора "минус" - C++
Помогите дописать программу или исправить ее. Нужно было написать программу, где создать класс матрицы, используя двухмерный динамический...

Класс "Дробь". Перегрузка оператора "==" - C++
template &lt;class T&gt; void polynomial&lt;T&gt;::refresh(){ //отбрасывающую старшие члены полинома с нулевыми коэффициентами int counter = 0;...

Класс "Матрица", перегрузка оператора "+" - C++
Здравствуйте. Создаю класс матрица, в нём перегружаю оператор &quot;+&quot;. На этапе компиляции всё замечательно, но при запуске программа вылетает....

Перегрузка оператора "+", чтобы выполнял "*" - C++
Ребят, привет всем, возник такой вопрос: возможно ли перегрузить оператор &quot;+&quot; так, чтоб выполнялось умножение? Например вводится...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
/*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);
0
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.. не хочет переходить почему-то на адрес следующего.
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)
0
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
30.03.2011, 00:16 #5
из-за того, что невнимательно прочитал код в начале, сидел почти час - разбирался почему же у вас не работает ничего)))
head=++head;
вы же просто делаете инкремент адреса, соответственно, ваш перегруженный метод не вызывается. Всего лишь нужно было сделать так (в рамках простого примера)
C++
1
*head = ++(*head);
и всё заработает)
2
/*Alexander*/
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
30.03.2011, 01:07 #6
Я не разу не писал обьект как уазатель,, да ещё этот код не запускал а VC. ))
Взял предьявленный код и подставил нужное действие)
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.03.2011, 11:10 #7
По хорошему, нужно осталять только
C++
1
++(*head);
без присваивания. Всё таки это инкремент. И определить постфиксную форму ещё.
0
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
30.03.2011, 22:17 #8
тоже так подумал, но придётся тогда по другому переопределять оператор.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2011, 22:17
Привет! Вот еще темы с ответами:

Перегрузка оператора "<<" для вывода пользовательских классов - C++
Всем доброго времени суток. Пытаюсь сделать перегрузку оператора &quot;&lt;&lt;&quot; для того, чтобы можно было выводить объекты пользовательского класса...

Перегрузка "оператора +" для сложения массива объектов - C++
Как перегрузить правильно оператор+ в данном случае или так делать нельзя? Ещё как-то туда надо передать размеры этого массива... и как...

Перегрузка операторов: Можно ли вынести "тело" оператора (расчеты) из H в CPP? - C++
Помогите новичку! Пишу класс и вынес его в отдельные файлы *.CPP и *.H Теперь пытаюсь переопределить операторы. Начал с = По примеру...

Перегрузка оператора вывода в классе "Время" - C++
Здравствуйте. Столкнулся с проблемой при работе с классом (Время), что выводит или чушь или вообще ничего не выводит. Прописал (вроде бы) 1...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.03.2011, 22:17
Ответ Создать тему
Опции темы

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