Энергетика



Pdf көрінісі
бет11/23
Дата07.02.2022
өлшемі1,03 Mb.
#91462
түріПрограмма
1   ...   7   8   9   10   11   12   13   14   ...   23
Байланысты:
is 1

6 Дәріс №6. Мұрагерлік 
Дәрістің мақсаты:
кластар мұрагерлігін түсіндіру. 
Дәрістің мазмұны:
кластың қорғалған мүшелері. Конструкторлар,
деструкторлар және мұрагерлік. 
Мұрагерлік – С++ тіліндегі объектіге бағытталған программалаудың 
басты механизмдерінің бірі. Оның көмегімен жалпыдан жекеге ауыса отырып 
өте күрделі кластарды құруға болады, сонымен қатар қорытынды кластардан 
айрықшаланатын жаңа кластарды өсіруге болады.
Жаңа класты жобалай отырып, алдын-ала оның объектілері қандай 
анағұрлым жалпы ерекшеліктерге ие болу керектігін анықтау және ұқсас 
дайын кластың бар жоқтығын тексеру қажет. Басқаша айтқанда, басында 
қайта өндіретін класс жоспарын «ірі көріністермен» құрған жөн, ал кейін бір 
уақытта жаңа қасиеттерді ала отырып, тәртіп пен қасиеттерді (яғни мүше 
деректер мен класс әдістері) мұраға алатын жаңа кластарды құрылған класс 
негізінде құра отырып, рет-ретімен бөлшектенуге көшеміз. 
Түрлі класс объектілері мен кластардың өздері алдын-ала құрастырған 
кластар иерархиясына сай келетін объектілер иерархиясы құрылған кезде 
мұрагерлік қатынасында бола алады. 
Бір класс екінші класс мұрагері болғанда жазбаның келесі негізгі пішіні 
қолданылады: 
{ class_ класс_ аты_ as базалық_ класс_ аты _ туынды 
{ туынды класының анықтамасы 
Мұндағы as – рұқсат ету спецификаторы ( access specifier) базалық 
класс элементтері ( base class) туынды класқа (derived class) қалай мұрагер 
болатынын анықтайды. 
Егер as public болса, онда барлық ашық мүшелері туындысы да ашық 
болып қалады. Егер as private шешуші сөзі болса, онда базалық кластың 
барлық мүшелері туынды класта жабыққа айналады. Екі жағдайда да 
базалық кластың барлық private мүшелері туынды класта қалай мұрагер 
болуына тәуелсіз, жабық және рұқсатсыз болып қалады.


24 
Егер as private болса, онда базалық кластың ашық мүшелері туынды 
класта жабық болуына қарамастан олар туынды кластың функция мүшелері 
үшін рұқсат етілген болып қалатынын ескерген жөн. 
Техникалық жағынан рұқсат ету спецификаторы міндетті емес. Егер ол 
көрсетілмеген туынды класс class шешуші сөзімен анықталса, онда базалық 
класс struct қызметші сөзімен үнсіздік бойынша ашық түрде мұра болады. 
Түсініктілік үшін рұқсат ету спецификаторын нақты түрде беру дұрыс. 
Public спецификаторымен мұрагерлік мысалын көрсетейік: 
class Base
{ int x; 
public: 
void setx (int n) {x=h;} 
void showx( ) { cout « x «endl ;} 
}; 
class Derived: public Base 
{ int y; 
public: 
void setx (int n) {x=h;} 
void showx( ) { cout « x «endl ;} 
}; 
int main (void) 
{ Derived obj; 
obj.setx (10); 
obj.sety (20);
obj showx( ); 
obj showy( ); 
return 0; 

Base класы ашық болып, мұраға қалдырылатындықтан оның ашық 
функциялары туынды класқа ашық болып қалады және сондықтан да 
программаның кез келген бөлігінен рұқсат етілген болады. Бұл функцияларды
main ( ) функциясынан сәйкесінше дұрыс шақыру керек.
Базалық кластың мүшелері рұқсат етілмеген болады, сондықтан туынды 
класс ішінде х айнымалысына тікелей рұқсат алуға талаптану әрекеті дұрыс 
емес. Ал базалық кластың ашық функциясы арқылы бұл мүмкін болады.
Егер класс сияқты жабық мұраға қалса, онда базалық кластың барлық 
мүше деректері мен туынды класта жабық болады және одан тыс қана рұқсат 
етілген болады. (Derived типті берілген объекттер үшін олар жабық болады). 
Рrivate спецификаторын қолдана отырып мұра ету кезінде базалық 
кластың ашық мүшелері туынды класта жабық болады. 
# include < iostream.h >


25 
class Base
{ int x; 
public: 
void setx (int n) {x=h;} 
void showx( ) { cout « x «endl ;} 
}; 
class Derived: public Base 
{ int y; 
public: 
void setxy(int n, int m) {set(n); y=m;} 
void showxy( ) {showx( ) ; cout « y «endl ;} 
}; 
int main (void) 
{ Derived obj; 
obj.setx (10); 
obj.sety (20);
obj showx( ); 
obj showy( ); 
return 0; 

Бұл жағдайда show x ( ) және set x ( ) функциялары туынды класс ішінде 
рұқсат етілген болады, бұл өте дұрыс, себебі олар бұл кластың жабық 
мүшелері болып табылады. 
 
Кластың қорғалған мүшелері. 
Қажет болғанда, базалық класс мүшелері жабық болып қалуы үшін, 
туынды класс қолжетімді болуы мүмкін.
Осы идеяны іске асыруда С++ те 
protected: спецификаторы қарастырылған. protected: спецификаторының
қолжетімділігі
private:
спецификаторынының жалғыз ерекшелігі - базалық 
кластың қорғалған мүшелері осы базалық кластың барлық туынды кластар 
мүшелеріне қолжетімділігіне. Базалықтан тыс немесе туынды кластардың 
қорғалған мүшелері қолжетімсіз.
Рrotected спецификаторы кез келген жерінде, әдетте кластың private 
мүшелерінен кейін public – класс мүшелерінің алдында орналасуы мүмкін. 
Базалық класс туынды кластың ашық (public) сияқты мұрасы болғанда 
базалық кластың жабық мүшесі туынды кластың қорғалған мүшесіне 
айналады. Базалық класс жабық (private) сияқты мұра болғанда, онда базалық 
кластың қорғалған мүшесі туынды кластың жабық мүшесіне айналады.
Сөйтіп мынаны ескерген жөн, туынды клас объектілері үшін мыналар 
рұқсат етілген: базалық кластың объектілері үшін ашық мүше деректері мен 
барлық ашық әдістері рұқсат етілген: 
-
класс мүшелері болып табылмайтын функциялар; 
-
глобальды айнымалылар. 


26 
Туынды класс ішінде базалық кластың базалық қорғалған мүшелері 
рұқсат етілген. 
Базалық класс тізімінде туынды класты жариялауға public 
модификациялары қолданылады: protected: private: олардың көмегімен 
базалық кластың мүшелері рұқсат етілмеуі мүмкін. 
Бұл С++ тілінің маңызды функциясы болып, объекттіге бағытталған 
программалаудың жақсы стилінің белгісі табылады.
Базалық кластың қорғалған мүшелері туынды кластың қорғалған 
мүшелері болады және main функциясы ішінде олар рұқсат етілген болады.
Protected рұқсат ету спецификаторын құрылыммен бірге де қолдануға 
болады. 
 
Конструкторлар, деструкторлар және мұрагерлік. 
Егер базалық және туынды кластардың конструкторлары мен 
деструкторлар бар болса, онда конструкторлар мұрагерлік тәртіппен, ал 
деструктор кері тәртіпте орындалады. 
Базалық класта инициализация бірінші болып орындалуы, ал туынды 
класс деструкторы объект жойылғанға дейін шақырылуы керек. 
Базалық және туынды кластардың барлық қажет аргументтері туынды 
класс объектілері құрылғанда туынды класс конструкторына беріледі. Кейін 
туынды класс конструкторын жариялаудың кеңейтілген формасын қолдана 
отырып, сәйкес аргументтер әрі қарай базалық класқа беріледі. Аргументтерді 
туындыдан базалық класқа берілу синтаксисі төменде көрсетілген: 
туынды_класс_конструкторы 
(аргументер_тізімі): 
базалық_класс 
(аргументтер_ тізімі)
Базалық және туынды кластар үшін бірдей элементтерді қолдану рұқсат 
етілген. Сонымен туынды класс үшін базалық аргументтерді елемеуге және 
тікелей оларды базалық класқа беру рұқсат етілген. 
Бақылау сұрақтары: 
1)
Базалық және туынды кластар әдістерінің бірдей аттары болуы
мүмкін бе? 
2)
Туынды кластың болашақ ұрпағына базалық кластың әдістері мен 
деректеріне мұра бола ала ма? 
3)
Three класы Two класымен түзілген болсын, ал Two класы One 
класымен түзіледі. Бұл әдістің қай түрін Three класы алады? 
4)
Базалық класта public түрінде сипатталып өткен әдісті туынды 
класта private: түрде сипаттауға бола ма? 
5)
Protected қызметші сөзі қандай мақсатта қолданылады? 


Достарыңызбен бөлісу:
1   ...   7   8   9   10   11   12   13   14   ...   23




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет