Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет118/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   114   115   116   117   118   119   120   121   ...   256
6.2.2 Конструкторы и деструкторы 
Для некоторых производных классов нужны конструкторы. Если конструктор есть в базовом классе, то 
именно он и должен вызываться с указанием параметров, если таковые у него есть: 
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) 


Бьерн Страуструп.
Язык программирования С++ 
 
153 

next = list; 
list = this; 

Здесь list должен быть описан как статический член employee. 
Объекты классов создаются снизу вверх: вначале базовые, затем члены и, наконец, сами производные 
классы. Уничтожаются они в обратном порядке: сначала сами производные классы, затем члены, а 
затем базовые. Члены и базовые создаются в порядке описания их в классе, а уничтожаются они в 
обратном порядке. 
6.2.3 Иерархия классов 
Производный класс сам в свою очередь может быть базовым классом: 
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 { /* ... */ }; 
Видим, что классы в С++ могут образовывать направленный ацикличный граф (подробнее об этом 
говорится в $$6.5.3). Этот граф для приведенных классов имеет вид: 


Достарыңызбен бөлісу:
1   ...   114   115   116   117   118   119   120   121   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет