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

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

Восстановить пароль Регистрация
 
lulusa
0 / 0 / 0
Регистрация: 04.10.2013
Сообщений: 11
28.04.2014, 18:44     Перегрузка оператора -> #1
Здравствуйте, мне нужно реализовать перегрузку operator-> .Как реализован оператор ->? Что он делает понятно, а как?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 18:44     Перегрузка оператора ->
Посмотрите здесь:

Перегрузка оператора == C++
Перегрузка оператора [] C++
C++ перегрузка оператора
C++ Перегрузка оператора
C++ Перегрузка оператора ++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 201
28.04.2014, 18:56     Перегрузка оператора -> #2
видимо как-то так:
C++
1
2
3
4
5
6
7
struct test 
{
    int a, b, c;
    test operator-> () {
        return *this;
    }
};
он работает.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
28.04.2014, 20:31     Перегрузка оператора -> #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class X
{
int x;
public:
X(int x0){x=x0;}
int GetX(){return x;}
};
class spX
{
X* p;
public:
   spX(X* pX){p=pX;}
  X* operator->(){return p;}
};
int main()
{
   X x(5);X* px=&x;
   spX spxObj(px);
   int res=spxObj->GetX(); // умный указатель
}
lulusa
0 / 0 / 0
Регистрация: 04.10.2013
Сообщений: 11
28.04.2014, 20:34  [ТС]     Перегрузка оператора -> #4
Меорн, а как работает -> ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
28.04.2014, 20:46     Перегрузка оператора -> #5
Цитата Сообщение от Меорн Посмотреть сообщение
он работает.
уверены?
lulusa
0 / 0 / 0
Регистрация: 04.10.2013
Сообщений: 11
28.04.2014, 20:46  [ТС]     Перегрузка оператора -> #6
zss, о, как раз по той теме, что мне сказали написать ("умный" указатель). Однако мне не понятно, как оно работает. Вот например, если я для класса X перегружу оператор+, то при вызове запись A + B равносильна A.operator+ (B).
Здесь же, оператор -> не имеет аргумента. Запись
C++
1
spxObj->GetX(); // spxObj.(operator->) GetX (); // </*какой-то указатель*/>  GetX ();
мне не очень понятна, получается, что в какой-то момент у нас есть несвязное выражение указатель-метод. Как компилятор понимает, что здесь надо перейти по этому самому указателю, а затем использовать оператор доступа (т.е. точку) к методу GetX (); Мы же вроде явно это нигде не прописываем!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
28.04.2014, 20:48     Перегрузка оператора -> #7
Цитата Сообщение от lulusa Посмотреть сообщение
Здесь же, оператор -> не имеет аргумента.
на выходе получается что-то типа этого:
C++
1
obj.operator->() -> member
то есть operator-> должен возвращать указатель или что-то, для чего так же имеется ->
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 20:53     Перегрузка оператора ->
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
28.04.2014, 20:53     Перегрузка оператора -> #8
Цитата Сообщение от lulusa Посмотреть сообщение
spxObj.operator->()->GetX ();
Для объекта spxObj вызывается метод operator->(),
который возвращает указатель px.
Далее используем обычную стрелку px->GetX();
Yandex
Объявления
28.04.2014, 20:53     Перегрузка оператора ->
Ответ Создать тему
Опции темы

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