    Оператор вызова функции 

    Перегрузка вызова функции operator() делает объект класса похожим на 
функцию, которую можно вызвать. Перегруженная функция operator() может 
возвращать значения заданных типов или вовсе ничего не возвращать. Кроме того, 
в ней также могут объявляться параметры. Она не может быть статическим членом 
класса. Вот образец класса с перегруженным оператором вызова функции, 
возвращающим целочисленное значение: 

    class TAnyClass { 
       int x; 
    public: 
        int operator()(void); 
       TAnyClass(int n) { x = n; } 
    }; 

    В классе TAnyClass перегружается оператор вызова функции с помощью 
объявления int operator()(void);. Вы можете заменить void списком необходимых 
вам параметров. Перегруженная функция-член реализуется как обычно: 

    int TAnyClass::operator()(void) { 
       return x; 
    }	

    В этом примере функция operator() возвращает целочисленные значения члена х 
объекта TAnyClass. В программе класс может использоваться следующим образом: 

    main() 
    { 
      TAnyClass object = 100; 
      int q = object(); // Выглядит как вызов функции! 
      cout « q; 
      return 0; 
   } 

    Второй оператор похож на вызов функции с именем object(), но на самом деле 
выполняется оператор object.operator()();. 

    Оператор доступа к члену класса 

    Унарный оператор доступа к члену класса -> перегружается как operator->(). 
Он не может быть статической функцией-членом класса. Вы можете перегрузить -> 
для класса TAnyClass следующим образом: 

    class TAnyClass { 
       int x, у; 
     public: 
       TAnyClass(int xx, int yy) { x = xx; у = yy; } 
       TAnyClass* operator->();	
       int GetX(void) { return x; }	
       int GetY(void) { return y; } 

    Функция-член operator->() должна возвращать объект, ссылку или указатель 
на объект класса. В данном случае она возвращает указатель на класс TAnyClass. 
Оператор реализуется следующим образом: 

    TAnyClass* TAnyClass::operator->() { 
      cout « "\nAccessing member: ";	
      return this; 
    }
 
    В данном примере демонстрируется использование перегрузки оператора -> в 
качестве отладочного трюка. Перегруженный оператор выводит короткое сообщение 
перед тем, как вернуть указатель this, ссылающийся на объект, для которого 
была вызвана функция-член. В основной программе перегруженный оператор может 
применяться для объектов класса TAnyClass следующим образом: 

     main() 
    {	.                                            
       TAnyClass t(100, 200); 
        cout « t->GetX() « '\л': cout « t->GetY() « '\n , 
       return 0; 
    }	


    378	Часть III. Программирование на ANSI C++ 
