Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Правила видимости при наследовании.
Наследование свойств и поведения могут контролироваться с помощью квалификаторов доступа,задаваемых при наследовании: public, protected, private. Названия квалификаторов доступа совпадают с названиями ранееописанных областей доступа в классах и структурах. Квалификаторы доступа ограничивают видимость полностью или частично для полностью или частично открытых членов. Закрытые члены всегда остаются закрытыми. При наследова-нии можно уменьшить видимость членов, но не расширить их видимость.
Кратко вид доступа в типе-наследнике для членов базового типа можно представить таблицей:
Замечание. Данная таблица показывает вид доступа для членов в типе на-следнике для типа наследника следующего уровня. Закрытый вид доступа в ти-пе-наследнике для закрытых членов базового типа имеет особый статус, описы-ваемый далее.
Если не указан тип наследования, то тип наследования по умолчанию оп-ределяется описанием типа наследника. Если тип-наследник описывается клас-сом, то тип наследования – закрытый (private), если же это структура, то на-следование по умолчанию будет открытым (public).
Пример:
struct A { int x;
};
class C: A {}; int main(){
C c;
// c.x = 1; // ошибка: в классе C из-за закрытого по
// умолчанию наследования поле x
// становится закрытым.
return 0;
}
Если тип-наследник описывается структурой, то наследование по умолча-нию становится открытым.
Пример:
class A { public: int x; private: int y;
};
struct C: A {};
int main(){C c;
c.x = 1; // ошибки нет, т.к. наследование – открытое. return 0; }
При необходимости открытого наследования членов базового типа, если тип-наследник описывается с использованием класса, следует явно указывать квалификатор public:
class C: public A { int z; };
Замечание. В других системах программирования,связанных,например,сязыком Java, не предусмотрен квалификатор доступа при наследовании, так как в языке Java предусмотрен только открытый способ наследования.
Защищенный вид доступа (protected) означает, что члены базового типа в типе-наследнике доступны только для методов своего (базового) типа, а также для методов производного типа. Во всех остальных случаях они ведут себя так же, как члены с закрытым видом доступа (private).
Пример:
struct A { int x,y;
};
class B: protected A { int z;
public:
void putx(int ap) {x = ap;
}
};
int main(){B b1; b1.putx(1);
...
return 0;
}
Ограничение видимости при наследовании ограничивает манипуляции с членами базового типа только в объектах типа-наследника и его потомках. По-этому при преобразовании указателя типа-наследника к указателю на объекты базового типа работа с объектом осуществляется в соответствии с правилами видимости для базового класса.
Пусть указатель на объект типа-наследника при защищенном наследовании преобразован к указателю на объекты базового типа. Тогда работа с объектом типа-наследника с использованием указателя на объекты базового типа проис-ходит в соответствии с правами доступа для базового типа (как уже было указано, через такой указатель виден не весь объект типа-наследника, а только его часть, соответствующая базовому типу):
struct A {
int x; int y;
};
struct B: A { int z;
};
class C: protected A { int z;
};
int main(){A a;
A* pa; B b; C c;
}
Примечание. Так как в данном примере наследование–защищенное,то приприсвоении указателя производного типа указателю базового типа требуется явноепреобразование (pa=(A*)pc;). При открытом наследовании возможно простое присвое-ние указателей (pa=pc). Это связано с тем, что указатель кроме адреса содержит ин-формацию об объекте. При защищенном наследовании изменяется не только состав членов класса, но и права доступа.
Далее вопросы наследования будут рассмотрены на основе классов. При необходимости данные сведения могут быть переработаны для структур с учетом области доступа и квалификатора доступа при наследовании в структурах по умолчанию.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 509; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.173.227 (0.012 с.) |