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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ описать функцию MonthDays(M, Y) http://www.cyberforum.ru/cpp-beginners/thread445777.html
Используя функцию IsLeapYear из задания Proc52, описать функцию MonthDays(M, Y) целого типа, которая возвращает количество дней для M-го месяца года Y (1 ≤ M ≤ 12, Y > 0 — целые числа). Вывести значение функции MonthDays для данного года Y и месяцев M1, M2, M3. Proc52. Описать функцию IsLeapYear(Y) логического типа, которая возвращает True, если год Y (целое положительное число) является...
C++ Как остановить выполнение кода в запущенном таймере? Здравствуйте. У меня есть таймер(в С++), в нем выполняются какие-либо действия и когда я нажимаю на кнопку мне надо остановить выполнение кода который описан в таймере(остановить в тот же момент когда нажимаю на кнопку!). Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread445768.html
C++ Пример с помощью класса
Решить следующий пример с помощью класса: #include <iostream.h> #include <math.h> class my { double b; int i;
Подскажите, пожалуйста, как правильно объявить динамически расширяемую строку? C++
Подскажите, пожалуйста, как правильно объявить динамически расширяемую строку? Когда я объявляю так: char* ch1=new char; и считываю её (gets(ch1)) , то при количестве символов >23 программа вылетает. Выдает вот такое: Windows has triggered a breakpoint in L.exe. This may be due to a corruption of the heap, which indicates a bug in L.exe or any of the DLLs it has loaded. This may also be...
C++ вычислите сумму элементов, которая расположена между теми элементами,которые сами расположены между первым и последним отрицательными элементами. http://www.cyberforum.ru/cpp-beginners/thread445752.html
вычислите сумму элементов, которая расположена между теми элементами,которые сами расположены между первым и последним отрицательными элементами.
C++ Преобразить массив так, чтобы элементы массива поменялись местами: первый - последним, второй - предпоследним, и т.д. преобразите массив, так чтобы элементы массива поменялись местами. Первое-последним, второе пред последним, и так далее подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
13.02.2012, 23:25     Перегрузка оператора ->
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 ну и далее по кругу.
 
Текущее время: 09:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru