    Предок 

    Базовый класс 

    Потомок 

    Производный класс   I      Производный класс   I     I Производный класс 

    Элементы одного уровня 

    Рис. 14.2. Несколько классов, производных от одного базового класса	.* 

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

    Другие производные классы Другие  производные классы	

Базовый класс   Базовый класс 
    класса А Базовый класс 
    i	k	А 1 
    Производный класс 
    класса В Базовый 'класс 
    1	ь 
    Производный класс		п) 
    класса С ^ Другие производные классы 
    А i		^\ 
    Производный класс		') 

    Рис. 14.3. Производный класс может быть базовым классом других производных классов 

    Производный класс наследует из базового данные-члены и функции-члены, но 
не конструкторы и деструкторы. Например, на рис. 14.3 производный класс А 
наследует свойства базового класса в вершине иерархии. Производный класс В 
наследует кроме этого и новые свойства класса А. Производный класс С наследует 
свойства верхнего базового класса и производных классов А и В. Позже вы 
столкнетесь с некоторыми уточнениями этого правила. В общем случае производный 
класс начинает свое существование с копирования членов базовых классов, 
включая все члены, наследованные из более далеких родственных классов. 

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

    Следующие несколько примеров демонстрируют механизм наследования. 
Рассмотрим базовый класс TBase, объявленный следующим образом: 

    class TBase { 
    private:
        int count; // Представляет закрытые данные класса 
    public:
       TBase() { count=0; }        
       void SetCount(int n) { count=n; }    
       int GetCount(void) { return count; } 
    } ;	

    Несмотря на то что члены TBase не имеют никакого практического применения, 
они очень похожи на те, тго используются в типичных классах C++, из которых 
могут быть выведены новые классы. Член count coдержит закрытые данные класса. 
Только закрытые функции-члены TBase могут непосредственно ссылаться на сount. 
Конструктор по умолчанию TBase() инициализирует count нулевым значением. Функция-член 

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