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

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

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

C++ Перегрузка оператора %
Перегрузка оператора == C++
Перегрузка оператора C++
перегрузка оператора! C++
Перегрузка оператора C++
C++ перегрузка оператора
Перегрузка оператора C++
C++ Перегрузка оператора ++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 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     Перегрузка оператора ->
Ответ Создать тему
Опции темы

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