Типы данных в языке C++__________________________________727

Деструкторы необходимы, если конструктор или какие-то функции — элемен-
ты класса динамически рапределяют память, создавая в ней какие-то объекты.
Тогда деструктор должен эти объекты удалять. В остальных случаях можно обыч-
но обойтись без деструктора.

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

12.13.5 Наследование и полиморфизм, виртуальные функции,
абстрактные классы

При описании нового класса, производного от какого-то одного или несколь-
ких базовых классов, можно добавлять новые функции — элементы и данные —
элементы, сохраняя при этом все элементы родителей, а можно родительские эле-
менты переопределить или перегрузить. В производном классе доступны открытые
и защищенные элементы базового класса (прямого или косвенного предшествен-
ника). Закрытые элементы базового класса в производном классе недоступны.

Производный класс может наследоваться от базового класса как public, pro-
tected или private (см. синтаксис такого наследования в разделе 12.13.1). Защи-
щенное и закрытое наследования встречаются редко и каждое из них нужно испо-
льзовать с большой осторожностью.

При порождении класса как public открытые элементы базового класса стано-
вятся открытыми элементами производного класса, а защищенные элементы базо-
вого класса становятся защищенными элементами производного класса. Закрытые
элементы базового класса никогда не бывают доступны для производного класса.

При защищенном наследовании открытые и защищенные элементы базового
класса становятся защищенными элементами производного класса. При закрытом
наследовании открытые и защищенные элементы базового класса становятся за-
крытыми элементами производного класса. При закрытом и защищенном наследо-
ваниях не справедливо отношение, что объект производного класса является объ-
ектом базового класса.

В целом доступ к элементам базового класса из производного класса можно
представить следующей таблицей.

|	Тип наследования
Спецификатор доступа к элементам в базовом классе	publicоткрытое наследование	protectedзащищенное наследование	privateзакрытое наследование
public	public в производном классеМожет быть доступен непосредственно любым нестатическим функциям-элементам, дружественным функциям и функциям, не являющимся элементами.	protected в производном классеМожет быть доступен непосредственно любым нестатическим функциям-элементам и дружественным функциям.	private в производном классеМожет быть доступен непосредственно любым нестатическим функциям-элементам и дружественным функциям.