ситуациях, когда необходимо, чтобы атрибуты базового класса, оставались закрытыми из вне, но были доступны в производном классе, то их необходимо объявляться как protected.
Спецификатор доступа protectedэквивалентен спецификатору private с единственным исключением: защищенная часть базового класса доступны для всех производных классов от базового класса. Но вне базового или производного класса защищенные часть недоступны.
Механизм наследования классов позволяет строить иерархии, в которых производные классы получают элементы базовых классов и могут дополнять их или изменять их свойства.
Классы, находящиеся ближе к началу иерархии, объединяют в себе наиболее общие черты для всех нижележащих классов.
Правила наследования различных методов:
I. Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, автоматически вызывается конструктор базового класса по умолчанию (без параметров). Сначала вызываются конструкторы базовых классов, начиная с самого верхнего уровня, а затем исполняется конструктор производного класса. В случае нескольких базовых классов их конструкторы вызываются в порядке объявления.
II. Операция присваивания не наследуется и, поэтому ее также требуется явно определить.
III. Деструкторы не наследуются, и если не описан деструктор в производном классе, он формируется по умолчанию и вызывает деструкторы всех базовых классов. В деструкторе производного класса не требуется явно вызывать деструкторы базовых классов, это будет сделано автоматически. Для иерархии классов, состоящей из нескольких уровней, деструкторы вызываются в порядке, строго обратном вызову конструкторов: сначала вызывается деструктор производного класса, затем — деструктор базового класса.
Указатель на базовый класс, может хранить как адрес объекта базового класса, так и адрес объекта производного от него класса. Причем через указатель на базовый класс, который указывает на объект производного класса, можно обращаться только к той части объекта, которые были унаследованы от базового класса. Если попытаться с помощью указателя обратиться к объектам самого производного класса, то компилятор выдаст ошибку. Указатель базового класса можно использовать для указания на объект производного класса, но обратное не возможно. Арифметические действия (++, --) над указателей связаны с типом данных при объявлении указателя. Следовательно, если он указывает на производный класс, то p++ все равно не будет показывать на следующий объект производного класса.
Производный класс может использоваться в качестве базового для другого производного класса, создавая многоуровневую иерархию классов. В этом случае исходный базовый класс является косвенным базовым классом. Определение производного класса, который напрямую наследует более одного базовогокласса.
class имя_пр_кл : сп_доступа имя_баз_кл1, … , сп_доступа имя_баз_клN
{
//тело производного класса
};
При прямом многократном наследовании производным классом одного и того же базового класса может возникнуть проблемы. Такую ситуацию, которая вызывает неоднозначность, можно избежать при помощи механизма
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.