

    Деструкторы выполняются i порядке от производного к базовому классу 

    Конструкторы выполняются в порядке от базового к производному классу 

    Объекты производного класса 

    Объект базового     класса 

    Рис. 14.9. Подобно зданию, объекты возводятся вверх от основания и 
уничтожаются сверху вниз 


    Объявленный класс похож на те, что вы уже видели в этой главе. Конструктор 
TBase() вызывает strdup() для создания копии строкового аргумента в куче и 
присваивания адреса выделенного участка памяти закрытому члену sptr. 
Деструктор ~TBaseO освобождает эту память, когда объект TBase выходит из 
области видимоcги. Функция-член Display() отображает адресуемую строку с 
помощью встраиваемого оператора вывода в поток. Вы можете объявить объект типа 
TBase как 

    TBase state("California") ; 

и затем вывести строку state оператором 

    state. Display() ;	

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

    cout « "State:   ";	
    state. Display(); 

    Но вам придется сделать аналогичные модификации во всей программе. Лучшее 
решение — вывести новый класс из TBase и заместить наследованную функцию-член 
Display() модифицированной версией. Вы можете написать производный класс 
следующим образом: 

    class TState:  public TBase {	
    public:	
      TState(const char *s): TBase(s) { } 
      void Display(void) ; // Замещающая функция
    } ;

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

    void TState::Display(void)	
   { 
       cout « "State:   "; // Новый оператор 
       TBase: : Display();    // Вызов замещенной функции-члена 
   } 


    Глава 14. Объектно-ориентированное программирование 345 
