Задача этой книги дать краткое и четкое изложение языка С++ в соответствии со стандар том iso/iec 14882. Она предназначена для студентов, изучающих язык «с нуля»



Download 2 Mb.
bet120/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   116   117   118   119   120   121   122   123   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Ключ доступа

Спецификатор базового класса

Доступ в производном классе

Комментарий

private

private
prOteCted publiC

private
private private

âñå private

prOteCted

private
prOteCted publiC

private
prOteCted prOteCted

âñå prOteCted, êðîìå private

publiC

private
prOteCted publiC

private
prOteCted publiC

íå èçìåíяåòñя

Êaê âèäíî èç òaáëèöû, private ýëåìåíòû áaçîâîãî êëañña â ïðîèçâîäíîì êëaññå íåäîñòóïíû âíå çaâèñèìîñòè îò êëþ÷a. Îáðaùåíèå ê íèì ìîæåò îñóùåñòâëяòüñя òîëüêî ÷åðåç ìåòîäû áaçîâîãî êëañña.
Ýëåìåíòû prOteCted ïðè íañëåäîâaíèè ñ êëþ÷îì private ñòaíîâяòñя â ïðîèçâîä- íîì êëaññå private, â îñòaëüíûõ ñëó÷aяõ ïðaâa äîñòóïa ê íèì íå èçìåíяþòñя.
Äîñòóï ê ýëåìåíòaì publiC ïðè íañëåäîâaíèè ñòaíîâèòñя ñîîòâåòñòâóþùèì êëþ-
÷ó äîñòóïa.
Åñëè áaçîâûé êëaññ íañëåäóåòñя ñ êëþ÷îì private, ìîæíî âûáîðî÷íî ñäåëaòü íå- êîòîðûå åãî ýëåìåíòû äîñòóïíûìè â ïðîèçâîäíîì êëaññå, îáúяâèâ èõ â ñåêöèè publiC ïðîèçâîäíîãî êëañña ñ ïîìîùüþ îïåðaöèè äîñòóïa ê îáëañòè âèäèìîñòè:
Class Base{

publiC: vOid f();
};
Class Derived : private Base{

publiC: Base::vOid f();
};


Простое наследование


Ïðîñòûì íaçûâaåòñя íañëåäîâaíèå, ïðè êîòîðîì ïðîèçâîäíûé êëaññ èìååò îäíî- ãî ðîäèòåëя. Äëя ðaçëè÷íûõ ìåòîäîâ êëañña ñóùåñòâóþò ðaçíûå ïðaâèëa íañëå-

äîâaíèя — íaïðèìåð, êîíñòðóêòîðû è îïåðaöèя ïðèñâaèâaíèя â ïðîèçâîäíîì êëaññå íå íañëåäóþòñя, a äåñòðóêòîðû íañëåäóþòñя. Ðaññìîòðèì íañëåäîâaíèå êëaññîâ è ïðîáëåìû, âîçíèêaþùèå ïðè ýòîì, ía ïðèìåðå.


Cîçäaäèì ïðîèçâîäíûé îò êëañña mOnstr êëaññ daemOn, äîáaâèâ ïîëåçíóþ â íåêî- òîðûõ ñëó÷aяõ ñïîñîáíîñòü äóìaòü. Áaçîâûé êëaññ ïðèâåäåí ñ íåêîòîðûìè ìåòî- äaìè, äîáaâëåííûìè â ïðåäûäóùèõ ðaçäåëaõ:
enum COlOr {red, green, blue};
// ------------- Êëaññ mOnstr -------------
Class mOnstr{
// ------------- Cêðûòûå ïîëя êëañña: int health, ammO;
COlOr skin;
Char *name;
publiC:
// Êîíñòðóêòîðû:
mOnstr(int he = 100, int am = 10); mOnstr(COlOr sk);
mOnstr(Char * nam); mOnstr(mOnstr &M);
// Äåñòðóêòîð:
~mOnstr() {delete [] name;}
// Îïåðaöèè:
mOnstr& OperatOr ++(){
++health; return *this;
}
mOnstr OperatOr ++(int){
mOnstr M(*this); health++; return M;
}
OperatOr int(){ return health;
}
bOOl OperatOr >(mOnstr &M){
if( health > M.get_health()) return true; return false;
}
COnst mOnstr& OperatOr = (mOnstr &M){ if (&M == this) return *this;
if (name) delete [] name; if (M.name){
name = new Char [strlen(M.name) + 1]; strCpy(name, M.name);}
else name = 0;
health = M.health; ammO = M.ammO; skin = M.skin; return *this;
}
// ------------- Ìåòîäû äîñòóïa ê ïîëяì:

int get_health() COnst {return health;} int get_ammO() COnst {return ammO;}


// ------------- Ìåòîäû, èçìåíяþùèå çía÷åíèя ïîëåé: vOid Change_health(int he){ health = he;}
// ------------- Ïðî÷èå ìåòîäû:
vOid draw(int x, int y, int sCale, int pOsitiOn);
};
// ------------- Ðåaëèçaöèя êëañña mOnstr -------------
mOnstr::mOnstr(int he, int am):
health (he), ammO (am), skin (red), name (0){} mOnstr::mOnstr(mOnstr &M){
if (M.name){
name = new Char [strlen(M.name) + 1]; strCpy(name, M.name);}
else name = 0;
health = M.health; ammO = M.ammO; skin = M.skin;
}
mOnstr::mOnstr(COlOr sk){ switCh (sk){
Case red : health = 100; ammO = 10; skin = red; name = 0; break; Case green: health = 100; ammO = 20; skin = green; name = 0; break; Case blue: health = 100; ammO = 40; skin = blue; name = 0; break;
}
}
mOnstr::mOnstr(Char * nam){
name = new Char [strlen(nam)+1]; strCpy(name, nam);
health = 100; ammO = 10; skin = red;
}
vOid mOnstr::draw(int x, int y, int sCale, int pOsitiOn)
{ /* … Îòðèñîâêa mOnstr */ }

// Êëaññ daemOn


Class daemOn : publiC mOnstr{ int brain;
publiC:
// Êîíñòðóêòîðû:
daemOn(int br = 10){brain = br;}; daemOn(COlOr sk) : mOnstr (sk) {brain = 10;}
daemOn(Char * nam) : mOnstr (nam) {brain = 10;} daemOn(daemOn &M) : mOnstr (M) {brain = M.brain;}
// Îïåðaöèè:
COnst daemOn& OperatOr = (daemOn &M){ if (&M == this) return *this; brain = M.brain;
mOnstr::OperatOr = (M); return *this;

}
// ------------- Ìåòîäû, èçìåíяþùèå çía÷åíèя ïîëåé: vOid think();


// ------------- Ïðî÷èå ìåòîäû:
vOid draw(int x, int y, int sCale, int pOsitiOn);
};
// ------------- Ðåaëèçaöèя êëañña daemOn -------------
vOid daemOn::think(){ /* … */ }
vOid daemOn::draw(int x, int y, int sCale, int pOsitiOn)
{ /* … Îòðèñîâêa daemOn */ }
 êëaññå daemOn ââåäåíî ïîëå brain è ìåòîä think, îïðåäåëåíû ñîáñòâåííûå êîíñò- ðóêòîðû è îïåðaöèя ïðèñâaèâaíèя, a òaêæå ïåðåîïðåäåëåí ìåòîä îòðèñîâêè draw. Âñå ïîëя êëañña mOnstr, îïåðaöèè (êðîìå ïðèñâaèâaíèя) è ìåòîäû get_health, get_ammO è Change_health íañëåäóþòñя â êëaññå daemOn, a äåñòðóêòîð ôîðìèðóåòñя ïî óìîë÷aíèþ.
Ðaññìîòðèì ïðaâèëa íañëåäîâaíèя ðaçëè÷íûõ ìåòîäîâ.
Êîíñòðónòîðû íå íañëåäóþòñя, ïîýòîìó ïðîèçâîäíûé êëaññ äîëæåí èìåòü ñîáñò- âåííûå êîíñòðóêòîðû. Ïîðяäîê âûçîâa êîíñòðóêòîðîâ îïðåäåëяåòñя ïðèâåäåí- íûìè íèæå ïðaâèëaìè.

  • Åñëè â êîíñòðóêòîðå ïðîèçâîäíîãî êëañña яâíûé âûçîâ êîíñòðóêòîða áaçîâî- ãî êëañña îòñóòñòâóåò, aâòîìaòè÷åñêè âûçûâaåòñя êîíñòðóêòîð áaçîâîãî êëañ- ña ïî óìîë÷aíèþ (òî åñòü òîò, êîòîðûé ìîæíî âûçâaòü áåç ïaðaìåòðîâ). Ýòî èñïîëüçîâaíî â ïåðâîì èç êîíñòðóêòîðîâ êëañña daemOn.

  • Äëя èåðaðõèè, ñîñòîяùåé èç íåñêîëüêèõ óðîâíåé, êîíñòðóêòîðû áaçîâûõ êëaññîâ âûçûâaþòñя ía÷èíaя ñ ñaìîãî âåðõíåãî óðîâíя. Ïîñëå ýòîãî âûïîë- íяþòñя êîíñòðóêòîðû òåõ ýëåìåíòîâ êëañña, êîòîðûå яâëяþòñя îáúåêòaìè, â ïîðяäêå èõ îáúяâëåíèя â êëaññå, a çaòåì èñïîëíяåòñя êîíñòðóêòîð êëañña.

  • Â ñëó÷aå íåñêîëüêèõ áaçîâûõ êëaññîâ èõ êîíñòðóêòîðû âûçûâaþòñя â ïîðяä- êå îáúяâëåíèя.


Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   116   117   118   119   120   121   122   123   ...   232




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish