    Функция anyFunctionO имеет единственный параметр t типа TTime. В функции 
вызывается функция-член Display() объекта t для вывода даты и времени, хранящихся 
в параметре. Программа может объявить объект класса TTime:

   TTime  today;                                                       

и затем лередать его по значению функции anyFunction():

   anyyFunction( today ) ;

    Функции также могут объявлять в качестве параметров указатели на класс. 
Передача больших по размерам объектов класса функции по значению приводит к 
выделению пространства нежелательной величины в стеке для таких объектов. В 
таких случаях предпочтительней параметры-указатели:

    Function (TTime *tp) 
    {
        tp->Display();	
    }

    Для вызова этой версии anyFunction() оператор вызова передает адрес объекта 
класса TTime вместо самого объекта:

    anyFunction(&today); 

    Наверное, это самый распространенный способ передачи объектов функции. 
Конечно, параметры функции могут объявляться как ссылки на объекты класса. 
Результаты будут аналогичными, как и в случае использована указателей, только 
внутри функции не будут нужны операции доступа по указателю. Приведем еще одну
версию anyFuuctionO, на этот раз с использованием ссылочного параметра на 
объект класса TTime: 

          void anyFunction(TTime &tr)      // tr - ссылочный параметр	
          {
             tr.Display() ;	// Вызов Display() для объекта, на который ссылается tr                                   
          }
 
    В каком-либо другом месте программы вы можете передать объект класса TTime 
непосредственно в качестве ссылочного параметра anyFunction():	

     anyFunction(today);

    Единственный недостаток ссылочных параметров — то, что такой оператор 
похож на передачу аргумента today по значению. Факт передачи в anyFunction()
ссылки на today из текста совершенно не очевиден.

    Объекты — результаты функций	

    Функции могут возвращать объекты классов непосредственно в качестве 
указателей или как ссылки. Реже всего используется функция, возвращающая 
непосредственно объект класса TTime:

   TTime newTime(void) 
   { 
      TTime t; 
      return t; 
   } 
   
 Локальный объект t (автоматически инициализированный вызовом конструктора 
в начале выполнения функции) возвращается непосредственно. Функция newTimeO 
может вызываться следующим образом: 

    TTime anotherTime = newTime() ;	.          

    При этом результат функции newTimeO копируется в anotherTime. Такой подход 
имеет мало преимуществ, и легче создать новый объект TTime без вызова функции: 

      TTime anotherTime ;  // Аналогично предыдущему                                   

    Чаще функции возвращают указатели и ссылки на объекты класса. Например, 
приведем функцию, выделяющую в памяти новый объект класса TTime и возвращающую 
его адрес: 

    TTime *newTimeP(void) 
    {
      TTime *p = new TTime;      // Выделение и инициализация объекта 
       return p;	// Возвращение адреса объекта в качестве результата функции 
   } 

    Внутри функции указателю р на TTime присваивается адрес объекта класса 
TTime, созданного с помощью new. Указатель существует только внутри функции, 
но объект, на который ссылается этот указатель, — глобальный, следовательно 
функция вправе возвратить его адрес. Оператор может вызвать newTime() для 
получения нового объекта и присвоить его адрес указателю на TTime, например 
tp: 

   Time *tp = newTimeP() ; 

    Глава 13. Программирование классов	331 
