Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 619; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |