Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Загальне і приватне успадковуванняСодержание книги
Поиск на нашем сайте
С++ надає багато можливостей для точного редагування доступів до членів класу. Одним з таких способів є оголошення похідного класу. В наших прикладах ми використовували оголошення типу class manage: public employce; Що дає нам слово public в цьому твердженні і чи має воно альтернативу? Ключове слово public визначає, що об’єкт похідного класу може мати доступ до методів базового класу, оголошених як public. Альтернативою є ключове слово private. При його використанні для об’єктів похідного класу нема доступу до членів базового класу.
Комбінації доступу Існує багато можливостей для доступу. Приведемо приклад, що показує, яка комбінація буде працювати, а яка – ні. Далі приведено лістінг програми 11.7 #include<iostream.h> #include<conio.h> #include<stdio.h> #include<bios.h> class A {private: int privdataA; protected: int protdataA; public: int pubdataA; }; ///////////// class B:public A {public: void funcs() {int a; // a=privdataA; помилка a=protdataA; a=pubdataA; } }; /////////// class C:private A {public: void funct() {int a; //a=privdataA; // помилка a=protdataA; a=pubdataA; } }; /////////// int main() {clrscr(); int a; B objB; // a=objB.privdataA;//помилка // a=objB.protdataA;//помилка a=objB.pubdataA;
C objC; // a=objC.privdataA;//помилка // a=objC.protdataA;//помилка // a=objC.pubdataA; //помилка bioskey(0); return 0; } Програма 11.7 В програмі описаний клас А, що має дані зі специфікаторами доступу private, public, protected. Клас В і С є похідними класами. Клас В є загальним спадкоємцем, клас С – приватним спадкоємцем класу А. Методи похідних класів мають доступ до даних базового класу, оголошений як public чи protected. Для об’єктів похідних класів відсутній доступ до членів базового класу, оголошених як protected чи private. Що нового у відмінностях між загальними і приватними похідними класами? Об’єкти загального спадкоємця В мають доступ до членів класу А, оголошених як public чи protected, а об’єкти приватного спадкоємця класу С мають доступ лише до членів, оголошених як private. Якщо не вказувати специфікатор доступу при створенні класу, то буде використаний специфікатор private.
Вибір специфікаторів доступу Не завжди очевидно, який специфікатор використовувати при успадковуванні. Переважно похідний клас являє собою покращену чи більш спеціалізовану версію базового класу, як це є у всіх наших попередніх прикладах. У випадку, коли об’єкт похідного класу надає доступ як до більш загальних методів базового класу, так і до спеціальніших методів похідного класу, краще обійтися загальним успадковуванням. Але в деяких випадках похідний клас створюється для повної модифікації дій базового класу, приховуючи чи дуже змінюючи його первісний вигляд, при цьому ряд методів базового класу взагалі хочемо «закрити», заборонивши їх використання. В цьому випадку можна скористатися приватним успадковуванням.
Рівні успадковування Похідні класи можуть виступати як базові класи для інших похідних класів. Розглянемо маленьку програму як приклад такого випадку: class A { }; class B:public A { }; class c:public B { } Тут клас В є похідним класу А, а клас С – похідним класу В. Процес може розвиватися далі. Розглянемо конкретніший приклад. Припустімо, що ми хочемо ввести в організації (програма 11.7) посаду бригадира. Відповідний клас називатиметься foreman, базуватиметься на класі laborer і міститиме порівняно з цим класом додаткове поле «процент виконання норми виробітку». Далі приведений лістінг програми 11.8. #include<iostream.h> #include<conio.h> #include<stdio.h> #include<bios.h> const int LEN=80; //////////// class employce {private: char name[LEN]; unsigned long number; public: void getdata() {cout <<”\nВведіть ПІП: “;cin>>name; cout <<”\nВведіть номер: “;cin>>number; } void putdata() const {cout<<”\nПІП=”<<name; cout<<”\nНомер=”<<number; } }; class manager:public employce {private: char title[LEN]; double dues; public: void getdata() {employce::getdata(); cout<<”\nPosada=”;cin>>title; cout<<”\nVnesky=”;cin>>dues; } void putdata() const {employce::putdata(); cout<<”\nПосада=”<<title; cout<<”\nВнески=”<<dues; } }; ////////// class scientist:public employce {private: int puts; public: void getdata() { employce::getdata(); cout<<”\nПублікації=”;cin>>puts; } void putdata() const { employce::putdata(); cout<<”\nПублікації=”<<puts; } }; //////////// class laborer:public employce { }; ///////// class foreman:public laborer {private: double quotas; public: void getdata() {laborer::getdata(); cout <<” Норма виробітку=”;cin>>quotas; } void putdata() const {laborer::putdata(); cout <<”\n Норма виробітку =”<<quotas; } }; ////////// int main() {clrscr(); laborer l1; foreman f1; //Ввід cout<<endl; cout<<”\nРобітник 1”; l1.getdata(); cout<<”\nБригадир 1”; f1.getdata();
//Вивід cout<<”\n\nl1”<<endl; l1.putdata(); cout<<”\n\nf1”<<endl; f1.putdata();
bioskey(0); return 0; } Програми 11.8
Множинне успадковування Клас може бути похідним не тільки від одного базового класу, а й від багатьох. Цей випадок називається множинним успадковуванням. Синтаксис опису множинного успадковування схожий на випадок простого успадковування. Далі приведений приклад множинного успадковування: class A { }; class B { }; clacc C:public A, public B { }; Базові класи класу С перелічені після двокрапки в рядку опису класу і розділені комами.
|
||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 32; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.221.252 (0.006 с.) |