Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Class CountOn:public Counter //похідний класСодержание книги
Поиск на нашем сайте
Для цього використовується знак двокрапки (не плутати з подвійною двокрапкою операції глобального дозволу), після нього – слово public та ім’я базового класу Counter. Іншими словами, цей рядок повідомляє нам, що CountOn є спадкоємцем класу Counter.
Доступ до базового класу Важливим компонентом успадковування є знання того, коли для об’єктів похідного типу можуть бути використані методи базового класу. Розглянемо їх на прикладі програми 11.1. Підстановка конструкторів базового класу Створимо об’єкт класу CountOn в функції main() CountOn c1; Цей рядок означає, що с1 буде створений як об’єкт класу CountOn та ініціалізований нулем. Але клас CountOn не має конструктора, яким же чином виконається ініціалізація? Виявляється, якщо ми не визначили конструктор похідного класу, то буде використовуватися підходящий за сигнатурою конструктор базового класу. В даному випадку компілятор використовує конструктор класу Counter без аргументів.
Підстановка методів базового класу Об’єкт с1 класу CounOn також може використовувати методи operator++() та get_count() з базового класу: ++c1; cout <<"\nc1="<<c1.get_count(); Компілятор, не знайшовши цих методів в класі, об’єктом якого є с1, використовує методи базового класу.
Специфікатор доступу protected Ми навчилися розширювати можливості класу, майже не модифікуючи його код. Розглянемо, що ж ми все-таки поміняли в класі Counter. Дані класу, з яким ми раніше познайомилися, мали специфікатор доступу private. В програмі 11.1 ми використовуємо інший специфікатор доступу – protected. Розглянемо його призначення. Згадаємо, що нам відомо про специфікатори доступу private і public. У методів класу є доступ до членів (полів і методів) класу, якщо вони мають будь-який з цих специфікаторів. Але при використанні об’єкту, оголошеного в програмі, можна дістати доступ тільки до даних зі специфікатором public. Однак при використанні успадковування в нас з’являється ряд додаткових можливостей. Виникає питання, чи можуть методи похідного класу мати доступ до членів базового класу? Це можливо тоді, коли ці члени мають специфікатор доступу public або protected. До членів, оголошених як private, доступу нема. Член, оголошений як protected, доступний методам свого класу і методам будь-якого похідного класу. При цьому він не буде доступним з функцій, які не належать до цих класів, наприклад, з функції main(). Далі приведена таблиця, яка відображає можливості використання специфікаторів доступу в різних ситуаціях.
Таким чином, якщо ми пишемо клас, який пізніше буде використовуватися як базовий при успадковуванні, то дані, до яких треба мати доступ, слід оголошувати як protected.
Недоліки використання специфікатора protected Використання специфікатора protected має недоліки. Припустімо, ми написали бібліотеку класів і публічно її поширюємо. Будь-який програміст може дістати доступ до членів класу, оголошених як protected, просто створюючи похідні класи. Це робить члени, оголошені як protected, значно менш захищеними, ніж оголошені як private. Щоб уникнути спотворення даних, часто доводиться дозволяти доступ похідним класам тільки до тих методів базового класу, що оголошені як public. Однак використання специфікатора доступу protected спрощує програмування.
Незмінність базового класу Згадаємо, що при успадковуванні базисний клас залишається незмінним. В функції main() програми 11.1 ми визначили об’єкт типу Counter Counter c2; Такі об’єкти поводяться так, начебто клас CountOn не існує. Зауважимо також, що успадковування не працює в зворотньому напрямку. Базовому класу і його об’єктам недоступні похідні класи. В нашому випадку це означає, що об’єкти типу Counter не можуть використовувати метод operator—() класу CountOn. Якщо ми хочемо мати можливість зменшувати лічильник, то об’єкт повинен бути класу CountOn.
|
||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 52; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.142.113 (0.005 с.) |