    Замещающая функция-член Display() выводит сначала "State: ", затем вызывает 
Display() базового клао для завершения строки. Поставив TBase:: перед DisplayO, 
вы указали компилятору, что следует вызвать функцию-член из TBase. 
    Объявление и использование объекта класса 

    TState state("Ohio"); 
    state. Display();

    приведет к отображению строки "State: Ohio". 
    Аналогичный трюк возможен и с конструкторами в производном классе. 
Предположим, вам необходимы несколько классов с различными именами штатов. Вы 
можете написать класс для каждого штата, подобных следующему: 

    class TPennsylvania:  public TState {	
    public:	
      TPennsylvania():  TState("Pennsylvanya") {}	
    };	

    Класс TPennsylvania выводится из TState. Новый конструктор, объявленный 
без параметров, передает символьную строку "Pennsylvania" конструктору базового 
класса. В следующих строках 

    TPennsylvania Pennsylvania;	
    Pennsylvania.Display() ;                                                                      

создается объект с именем Pennsylvania и выводится название штата. 
    Конструкторы также могут иметь дополнительные параметры. Наверное, вам 
понадобится класс, coxpаняющий кроме названия штата еще и плотность 
населения. Вы можете вывести новый класс из TState: 

    class TPopulation:  public TState { 
    private: 
       long population; 
    public: 
       TPopulation( long n,   const char *name ); 
       void Display(void); 
    }
 
    Конструктор TPopulation имеет длинный целый параметр плотности населения и 
символьный указатель на название штата. Вы можете реализовать конструктор 
следующим образом:	

    TPopulation::TPopulation(long n,  const char «name) 
    private:	
       long population;	
    public: 
       TPopulation (long n, const char *narae) ; 
       void Display(void); 
    }; 

    Производный класс вызывает конструктор базового класса, передавая имя 
TStateO для инициализации строковой части объекта производного класса. После 
этой операции конструктор сохраняет длинный цельй параметр n в закрытом члене 
производного класса. 
    Для отображения названия штата и плотности его населения вы можете 
написать замещающую функцию-член Display() следующим образом: 

    void TPopulation::Display(void) 
    { 
       TState: .Display() ; 
       cout « "Population == " « population « '\n'; 
    } 

    Где-нибудь в другом месте программы вы можете создать и использовать 
объект класса TPopulation для отображения названия штата и плотности населения: 

    TPopulation Nebraska(1570000,   "Nebraska"); 
    Nebraska. DisplayO;	


    Использование наследования

    До сих пор в этой главе приводилось лишь несколько академических фактов, 
имеющих отношение к наследованию, производным классам, конструкторам и 
деструкторам. Более близкие к жизни примеры покажут, как заставить эти 
концепции работать в реальной программе. С помощью наследования вы можете 
выводить новые классы, приумножающие свойства уже существующих. Вместо того 
чтобы всякий раз писать код с чистого листа, вы сможете с помощью классов и 
наследования строить программы, использующие преимущества существующего кода, 
что значительно легче, чем с помощью обычных библиотек функций. 
    Borland C++ содержит расширенную библиотеку классов (см. главу 16). Один 
класс с именем TTimer разработан специально для событий, связанных со 
временем. В этой главе вы построите производный класс, ко


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