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

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

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

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

13.02.2012, 22:44. Просмотров 492. Ответов 2
Метки нет (Все метки)

скажите, а какие особенности перегрузки -> ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 22:44     Перегрузка оператора ->
Посмотрите здесь:

Перегрузка оператора - C++
#include <iostream> class Node { public: char *s; int length; Node * next; public: Node(); Node(char* val) {

Перегрузка оператора = - C++
Ещё раз всем привет! Недавно разместила у себя "лайт-вершин" своего вектора - int_array. И все дружно начали мне говорить, что у меня...

Перегрузка оператора > - C++
Добрый день! #include <stdio.h> #include <tchar.h> #include <iostream> template <typename T1, typename T2> bool ...

Перегрузка оператора << - C++
Доброе время суток! Возникло осложнение с лабой. Нужно перегрузить оператор &lt;&lt; так, чтобы при помощи него можно было копировать информацию...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора + - C++
Не могу заставить работать перегруженный оператор + в функции CMoveByVector Point.h: #define POINT_H #include &lt;iostream&gt; ...

Перегрузка оператора + - C++
Написал для перегрузки оператора + class BoolMatrix { private: int feet; public: BoolMatrix(int f): feet(f) {} ...

Перегрузка оператора * - C++
Операция произведения применяется к объекту квадрат, при этом изменяются координаты центры фигуры. Результатом произведения является...

Перегрузка оператора ^ - C++
Здравствуйте! Необходимо перегрузить бинарный оператор ^ для транспонирования матрицы. Есть класс матрицы: template &lt;class T&gt; class...

Перегрузка оператора -> - C++
Для чего она вообще и как её использовать? Черканите, если не трудно, &quot;детский&quot; примерчик !


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
13.02.2012, 23:25     Перегрузка оператора -> #2
1. Он может быть только методом класса. свободной функцией быть не может.
2. Если вы не извращенец и хотите использовать нормальную запись вида
someClass->SomeFunction() а не (someClass.operator -> ())%прочие действия%, то
2.1 Возвращаемый тип может быть либо указателем на какой-то класс
2.2 Либо возвращаемый тип - это какой-то класс, у которого этот оператор переопределен
по условиям из пункта 2.
Вместо класса может быть и структура.

http://liveworkspace.org/code/de6514...eb26846e7791ff

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
#include <iostream>
 
class Foo
{
public:
  void f() const {};
};
 
class A
{
public:
  const Foo* operator -> () const
  {
    std::cout << "A::operator ->" << std::endl;
    return &m_foo;
  }
 
  private:
    Foo m_foo;
};
 
class B
{
public:
  const A operator -> () const
  {
    std::cout << "B::operator ->" << std::endl;
    return A();
  }
};
 
 
int main()
{
  std::cout << "First case:" << std::endl;
  A a;
  a->f();
 
  std::cout << "Second case:" << std::endl;
  B b;
  b->f();
 
  return 0;
}
Ну и еще он без параметров. Эта особенность и условие из пункта 1 бывает и у других операторов. так что это не совсем особенности. А вот пункт 2 пожалуй особенность. Компилятор в сгенеренном коде будет подставлять вызовы оператора до тех пор, пока оператор не вернет указатель на какой-нибудь класс. В какой-то книге встречал упоминание того, что старые компиляторы подвисали в случае, когда оператор класса A возвращал объект типа B у которого этот оператор возвращал объект типа С, у которого этот оператор возвращал объект типа A ну и далее по кругу.
silent_1991
14.02.2012, 08:00     Перегрузка оператора ->
  #3

Не по теме:

Цитата Сообщение от DU Посмотреть сообщение
старые компиляторы подвисали
Я как-то тоже захотел проверить gcc на вшивость - умным оказался, увидел циклический вызов))

Yandex
Объявления
14.02.2012, 08:00     Перегрузка оператора ->
Ответ Создать тему
Опции темы

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