Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы Осадчий А.В. гр.010902.docx
Скачиваний:
9
Добавлен:
24.04.2019
Размер:
143.34 Кб
Скачать

27. Понятие наследования. Механизм ограничения доступа при наследовании.

Цель объектно-ориентированного программирования состоит в повторном использовании созданных вами классов, что экономит ваше время и силы. Если вы уже создали некоторый класс, то возможны ситуации, что новому классу нужны многие или даже все особенности уже существующего класса, и необходимо добавить один или несколько элементов данных или функций. В таких случаях C++ позволяет вам строить новый объект, используя характеристики уже существующего объекта. Другими словами, новый объект будет наследовать элементы существующего класса (называемого базовым классом). Когда вы строите новый класс из существующего, этот новый класс часто называется производным классом.

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

Для инициализации элементов производного класса ваша программа должна вызвать конструкторы базового и производного классов.

Используя оператор точку, программы могут легко обращаться к элементам базового и производного классов.

В дополнение к общим (public) (доступным всем) и частным (private) (доступным методам класса) элементам C++ предоставляет защищенные (protected) элементы, которые доступны базовому и производному классам.

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

Атрибут класса (модификатор прав доступа) может задаваться ключевыми словами public и private. Атрибут может опускаться – в этом случае принимается атрибут по умолчанию (для ключевого слова class – private, для struct – public). Объединение (union) не может быть базовым или производным классом.

Модификатор прав доступа используется для изменения прав доступа к наследуемым элементам класса в соответствии с правилами:

Ограничения на доступ в базовом классе

Модификатор наследования прав

Ограничения на доступ в производном классе

private

private

Нет доступа

protected

private

private

public

private

private

private

public

Нет доступа

protected

public

protected

public

public

public

28.Приведение типа указателя базового класса к указателю производного класса и наоборот.

В общем случае ук-ль одного типа не может указывать на объект другого типа. Из этого правила есть исключение, к-ое относится только к производным классам. Т.е. ук-ль на базовый класс может указывать на объект производного класса, получ-го из этого баз-го класса. Пусть есть базов. класс B_class и производный от него - класс D_class

В_class *p;

B_class B_ob;

D_class D_ob;

p = &B_ob; // р указ на объект типа B_class

p = &D_ob;// р указ-ет на объект типа D_class, явл-ся объектом, произв. от B_class

Используя указ-ль р, можно получить доступ ко всем членам D_ob, к-ые наследованы от B_ob. Однако специфические члены D_ob не могут быть получены с исп-ем указ-ля р (до тех пор, пока не осущ-но приведение типов((D_class *)p)-> f(); \\ здесь ф-я f() член класса D_class). Это явл-ся следствием того, что указатель знает только о членах базового класса и ничего не знает о специфич-х членах производных классов.

Хотя ук-ль, имеющий тип указателя на базовый класс, может исп-ся в кач-ве ук-ля на производный объект, обратное не имеет места. Это означ., что указатель, имеющий тип указателя на производный класс, не может исп-ся для доступа к объектам баз-го класса.