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

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

Войти
Регистрация
Восстановить пароль
 
lulusa
0 / 0 / 0
Регистрация: 04.10.2013
Сообщений: 11
#1

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

28.04.2014, 18:44. Просмотров 221. Ответов 7
Метки нет (Все метки)

Здравствуйте, мне нужно реализовать перегрузку operator-> .Как реализован оператор ->? Что он делает понятно, а как?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 202
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
Модератор
Эксперт С++
6242 / 5845 / 1891
Регистрация: 18.12.2011
Сообщений: 14,972
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,940
Записей в блоге: 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
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,940
Записей в блоге: 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++
C++ Перегрузка оператора
C++ Перегрузка оператора +=

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

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

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