Тақырып 4-5. «Кластар мұрагерлігі. Көпше түрдегі мұрагерлік»
Мақсаты: Кластар мұрагерлігі туралы түсінік беру.
Кілттік сөздер: мұрагерлік, кластар иерархиясы.
Дәріс жоспары:
Мұрагерлік. Мұрагерлік түрлері.
Туынды кластардың конструкторлары және деструкторлары.
Көпше түрдегі мұрагерлік.
§1. Мұрагерлік. Мұрагерлік түрлері
С++ тілі ОБП-ның негізгі концепцияларының бірі болып табылатын мұрагерлік механизмін қолдайды.
Мұрагерлік деп бұрыннан бар базалық кластарға өрістер мен әдістер қосу жолымен жаңа күрделірек туынды кластарды құрастыруды атайды. Мұрагерлік кластарды қайта бағдарламаламай және бағдарламаларды қайта компиляцияламай кластардың фундаментальді мүмкіндіктерін кеңейтудің тиімді әдісі болып табылады.
Анықтама бойынша туынды класс компоненттері болып базалық кластың конструктор, деструктор және тең (=) операторын қайта анықтайтын компонентті функциядан (әдістен) басқа барлық компоненттері, және де туынды класс денесінде келтірілген барлық компоненттер саналады. Туынды кластың бірінші өрісі базалық кластың барлық өрістерінен кейін орналасады. Функционалды мағынада туынды кластар немесе ұрпақтар базалық кластарға қатысты қуаттырақ болады, себебі, базалық кластың көптеген функциялары мен өрістеріне қатынай отырып, олар өздерінің де компоненттеріне ие.
Базалық кластың (бабаның) өрістері мен функцияларына қатынауды шектеу мұрагерлік түрін анықтайтын сипаттаушылар көмегімен жүзеге асырылады. Туынды класты (ұрпақты) анықтау келесі түрде орындалады:
сlass <туынды класс атауы> : <мұрагерлік түрі><базалық класс атауы> {<класс денесі>};
мұндағы мұрагерлік түрі private, protected, public кілттік сөздерімен анықталады.
Базалық кластың өрістері мен функцияларының туынды класта көрінуі мұрагерлік түрімен анықталады және 4.1 кестеде келтірілген.
Базалық класс компоненттерінің туынды класта көрінуі
4.1 кесте
Мұрагерлік түрі
|
Базалық класта компоненттердің хабарлануы
|
Туынды класта компоненттердің көрінуі
|
Private
|
Private
Protected
Public
|
Көрінбейді
Private
Private
|
Protected
|
Private
Protected
Public
|
Көрінбейді
Protected
Protected
|
Public
|
Private
Protected
Public
|
Көрінбейді
Protected
Public
|
Ескерту. Егер мұрагерлік түрі көрсетілмеген болса, онда үнсіз жағдайда private алынады. Бірақ бағдарламалау стилі кез келген жағдайда мұрагерлік түрі анық көрсетілуін талап етеді.
Мысал 4.1. Public мұрагерлік түрімен туынды класты сипаттау
#include
#include
class A // базалық класс
{
private: int za; // ішкі өріс
public: int oa;
void print(void)
{cout<<" A класының ішкі өрісі="<cout<<" A класының ашық өрісі="<< oa<< endl;}
A(){za=20; oa=50;} //конструктор
};
// В класы- ұрпақ
class B: public A// A класының барлық компоненттері B класында қол жетімді
{private: int zb;
public:
void print(void)
{cout<<" B класының ішкі өрісі ="<cout<<" B класында қол жетімді A класының ашық өрісі =";cout<< oa<B(){zb=100;}
};
void main()
{clrscr();
A aa; B bb;
cout<<"Жұмыс нәтижесі:" << endl;
aa.print(); // 20 50 шығады
bb.print(); // 100 50 шығады
getch();
}
Туынды класс private мұрагерлік түрінде де базалық кластың protected және public секциялары компоненттерінің көрінуін өзгерте алады. Бірақ, өріс қол жетімділігінің сипатталауын өрістің базалық класта сипатталған секциясына орналастыру қажет!
Мысал 4.2. Private мұрагерлік түрімен туынды класты сипаттау
#include
#include
class A // базалық класс
{
private: int za;
protected: int pra;
public: int oa;
void print(void)
{ cout<<" A класының жабық өрісі="<cout<<" A класының қорғалған өрісі="<< pra<cout<<" A класының ашық өрісі="<< oa<< endl;}
A(){za=20; pra=30; oa=50;}
};
class B: private A// кластың барлық компоненттері B класында көрінбейді
{private: int zb;
protected: // базалық кластағы секцияда сипатталған
A:: pra;// A класының қорғалған өрісі B класында көрінетін болып хабарланады
public:
A:: oa;// A класының ашық өрісі B класында көрінетін болып хабарланады
void print(void)
{cout<<" B класының жабық өрісі="<cout<<" B класында қол жетімді A класының ашық өрісі =";
cout<< oa<cout<< " B класында қол жетімді A класының қорғалған өрісі =";
cout<< pra<B(){zb=100;}
};
void main()
{clrscr();
A aa; B bb;
cout<<"Жұмыс нәтижесі:" << endl;
aa.print(); // 20 30 50 шығады
bb.print(); // 100 50 30 шығады
getch(); }
Бір базалық кластан қалауынша туынды кластар шығаруға болады. Өз кезегінде туынды кластар да басқа кластар үшін базалық бола алады. Мұрагерлік арқылы байланысқан кластар жиынтығы кластар иерархиясын құрайды. Мұрагерлік қатынасын бейнелеу кезінде көбінесе иерархия немесе ағаш түрі қолданылады.
сlass A
сlass C
сlass B
сlass D
Сурет 4.1. Кластар иерархиясының мысалы
Кластар иерархиясы қалауынша терең бола алады. С класын D класының тікелей базалық класы, ал А класын –D класының жанама базалық класы деп атайды.
Достарыңызбен бөлісу: |