    Инициализация членов объекта класса 

    В конструкторе обычно инициализируются данные-члены объекта класса. 
Например, в классе TAnyCla объявляются два целочисленных данных-члена х и у, 
инициализирующихся с помощью операторов присвания во встраиваемом конструкторе: 

    class TAnyClass {	
    private:
       int x, у; 
    public: 
      TAnyClass() { x = 0; у = 0;  } 
       .....
    }

    В качестве альтернативы вы можете инициализировать члены так, как если бы 
они имели конструкторы: 

    class TAnyClass { 
    private: 
       int x, у; 
    public: 
       TAnyClassO: x(0), y(0) { } 
       .......
    };
 
    В этой версии конструктора TAnyClass членам хну присваиваются нулевые 
значения аналогично тому, как это делалось с помощью присваиваний в предыдущем 
примере. Скомпилированный код один и тот же для обоих фрагментов, однако во 
втором случае инициализаторы данных-членов задаются до выполнения тела 
конструктора. (В данном случае тело конструктора пустое.) 
    Этот прием особенно полезен для инициализации объектов других классов. 
Например, предположим, что класс TAnyClass имеет член-объект класса TNewClass 
и конструктору класса TNewClass необходим один целочисленный параметр: 

    class TNewClass { 
       int x; 
    public: 
      TNewClass(int n) { x = n;  }	
      ....
    }

    Если в классе TAnyClass объявляется член типа TNewClass, конструктор 
TAnyClass обязан инициализировать этот объект. Поскольку конструктор не может 
быть вызван непосредственно, объект должен инициализироваться с помощью 
альтернативного способа, описанного ранее: 

    class TAnyClass { 
    private: 
      int x; 
      TNewClass z;               // Объект-член класса
    public: 
       TAnyClass(int n): z(n) // Инициализация z
             { x = n; }                  // Инициализация x 
      .........
    }
     
    Член класса x, как и раньше, имеет тип int. Член z — объект класса TNewClass. 
Конструктор класса TAnyClass объявляется с целочисленным параметром 
n, использующимся для инициализации z перед выполнением тела конструктора. 
Внутри конструктора с помощью присваивания значение n запоминается в члене х. 
Если в классе имеется несколько объектов-членов, вы можете инициализировать 
их, перечислив и разделив запятыми, следующим образом: 

    class TAnyClass { 
    private: 
       int x;	
       TNewClass a, b, z;	// Три объекта-члена класса public: 
       TAnyClass(lnt n): a(n). b(n.), z(n) // Инициализация а, Ь и z 
           { x = n; } 	// Инициализация х 
      ......
    }; 
 

    Вложенные объявления в классе	

    Внутри класса могут объявляться не только данные и функции, но и другие 
элементы: typedef, struct и даже другой класс. Такие вложенные объявления в 
классе бывают полезны, если они тесно связаны с классом. Они также позволяют 
двум или более классам объявлять элементы с одинаковым названием, 
различающиеся только по именам соответствующих им классов. 


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