    Вложенный typedef следует использовать для экспорта типов данных из 
класса. Например, в классе TAnyClass typedef используется для объявления 
CLASS_COUNTER в качестве алиаса для int: 

    class TAnyClass { 
    public: 
       typedef int CLASS_COUNTER;      // Вложенное объявление typedef static 
       CLASS_COUN?ER ClassCount;  // Статическая переменная 
    public: 
       TAnyClass() { ClassCount++; }
       ~TAnyClass() { ClassCount--; } 
    };

    В классе также объявляется статическая переменная типа CLASS_COUNTER с 
именем ClassCount. Чтобы выделить память для этой переменной, в программе 
необходимо сделать следующее глобальное объявление: 

    TAnyClass::CLASS_COUNTER TAnyClass::ClassCount; 

    Имя класса предшествует типу данных и имени переменной. Поскольку в классе 
TAnyClass существует typedef CLASS_COUNTER, в программе можно объявить 
переменную ClassCount, не зная действительного типа переменной. Без помощи со 
стороны программы класс может самостоятельно подсчитывать число созданных 
объектов его типа: 

    TAnyClass *cp1,  *ср2,  *срЗ;     // Объявление указателей на объекты класса. 
    ср1 = new TAnyClass;	// Создать объект класса 
    ср2 = new TAnyClass;	// 
    срЗ = new TAnyClass;	// 
    cout « "There are " « TAnyClass::ClassCount « " objects\n"; 

    Последний оператор отобразит 3. Опять же, имя класса предшествует ссылке 
на ClassCount. Также возможны сложные вложенные объявления. Внутри класса 
может объявляться структура: 

    class TAnyClass { 
    public: 
       struct ClassStruct { 
          int x; int y; 
       }; 
    };

    В программе может затем объявляться объект типа TAnyClass::ClassStruct: 

    TAnyClass::ClassStruct k; 

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

       k.x = 1; 
       k.y = 2; 

    Дальнейшее развитие этой концепции приводит к вложенным объявлениям класса 
— один класс объявляется внутри другого: 

    class TAnyClass { 
    public: 
       class ClassClass { 
          int x; 
          int y; 
       public: 
          ClassClass() { x = 1; у = 2;  } ;
          nt GetX(void) { return x;   } 
          int GetY(void) { return y;   } 
       }; 
    }; 

    В этом примере в классе TAnyClass объявляется внутренний класс с именем 
ClassClass. В программе можно использовать этот вложенный класс следующим образом: 

    TAnyClass::ClassClass k; 
    cout « "k.x == " « k.GetX() « '\n'; 
    cout « "k.y == " « k.GetY() « '\n'; 

    Также возможны и другие виды вложенных объявлений в классе, такие как 
перечисление констант. (Ключом к использованию вложенных объявлений в классе 
является следующее правило: ссылке на вложенный элемент должны предшествовать имя 
класса и оператор разрешения области видимости. За исключением этого правила, вы 
можете использовать вложенные объявления в классе точно так же, как и обычные. 

    Опция  fast this 

    В Borland C++ 3.1 был введен важный метод оптимизации, который теперь 
называется опцией fast this, с его помощью можно значительно улучшить 
быстродействие объектно-ориентированных программ. Как вам 


    Глава 15. Передовые средства C++  399
