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

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

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

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

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

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

Перегрузка оператора != - C++
Помогите разобраться с перегрузкой оператора != есть класс, в котором, в разделе private объявлен указатель на массив std::string *str; ...

перегрузка оператора + - C++
Не могу понять: в 184 строке отказывается работать. Без нее - все нормально. Скорее всего неправильно переопределил +.... Но если...

Перегрузка оператора + - C++
Делаю класс полиномов, которые можно складывать и перемножать. Каждый член полинома есть отдельный класс под названием Term. в классе Term...

Перегрузка оператора [] - C++
Есть код перегрузки оператора для получения данных из массива. #include <iostream> class obj { private: int *arr; ...

Перегрузка оператора - C++
Доброго всем времени. пытаюсь написать свой класс надстройка на одномерный массив. У меня вот возникло затруднение с перегрузками...

Перегрузка оператора - C++
Подскажите пожалуйста, способ перегрузки операторов >= и <= в следующей строке if ( ob.str >= '0' && ob.str <= '9' )Мой вариант не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Меорн
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
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 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Эксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 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Эксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 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++
реализую класс собственных строк называеться MyString вылетает при использовании оператора += самое интересное что если дебажишь код по...

Перегрузка оператора <= - C++
Основная задача данного фрагмента отсортировать массив структур по полю name в алфавитном порядке, используя добавление с бинарным поиском...

Перегрузка оператора ~ - C++
Доброго времени суток! Помогите пожалуйста с решением задачи. Описать класс множество целых чисел. Перегрузить следующую операцию: ~...

Перегрузка оператора << - C++
Вот упрощенный вариант моей программы, пересчитывает время в 12-й формат мне нужно перегрузить оператор &lt;&lt; так, чтобы time_cycle_1&lt;&lt;(1);...


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

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

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