Инструменты пользователя

Инструменты сайта


examination:oop:question43

Иерархия классов. Конструкторы и деструкторы производного и базового классов: определение, вызов, список инициализации

Иерархия классов

Производный класс сам в свою очередь может быть базовым классом:

      class employee { /* ... */ };
      class manager : public employee { /* ... */ };
      class director : public manager { /* ... */ };

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

      class temporary { /* ... */ };
      class secretary : public employee { /* ... */ };
     class tsec
       : public temporary, public secretary { /* ... */ };
     class consultant
       : public temporary, public manager { /* ... */ };

Конструкторы и деструкторы

Для некоторых производных классов нужны конструкторы. Если конструктор есть в базовом классе, то именно он и должен вызываться с указанием параметров, если таковые у него есть:

      class employee {
        // ...
      public:
        // ...
        employee(char* n, int d);
     };
     class manager : public employee {
        // ...
     public:
        // ...
       manager(char* n, int i, int d);
     };

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

     manager::manager(char* n, int l, int d)
        : employee(n,d), level(l), group(0)
     {
     }

Конструктор базового класса employee::employee() может иметь такое определение:

     employee::employee(char* n, int d)
         : name(n), department(d)
     {
       next = list;
       list = this;
     }

Здесь list должен быть описан как статический член employee. Объекты классов создаются снизу вверх: вначале базовые, затем члены и, наконец, сами производные классы. Уничтожаются они в обратном порядке: сначала сами производные классы, затем члены, а затем базовые. Члены и базовые создаются в порядке описания их в классе, а уничтожаются они в обратном порядке.

examination/oop/question43.txt · Последние изменения: 2014/01/15 08:22 (внешнее изменение)