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



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

Виртуальные методы


Ð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ññ:
mOnstr *p;
// Óêaçaòåëü ññûëaåòñя ía îáúåêò ïðîèçâîäíîãî êëañña:
p = new daemOn;
Âûçîâ ìåòîäîâ îáúåêòa ïðîèñõîäèò â ñîîòâåòñòâèè ñ òèïîì óêaçaòåëя, a íå ôaê- òè÷åñêèì òèïîì îáúåêòa, ía êîòîðûé îí ññûëaåòñя, ïîýòîìó ïðè âûïîëíåíèè îïåðaòîða, íaïðèìåð,
p->draw(1, 1, 1, 1);
áóäåò âûçâaí ìåòîä êëañña mOnstr, a íå êëañña daemOn, ïîñêîëüêó ññûëêè ía ìåòîäû ðaçðåøaþòñя âî âðåìя êîìïîíîâêè ïðîãðaììû. Ýòîò ïðîöåññ íaçûâaåòñя ðaííèì


1 Ïåðåîïðåäåëяòü â ïðîèçâîäíîì êëaññå ðåêîìåíäóåòñя òîëüêî âèðòóaëüíûå ìåòîäû (ñì. ñëåä. ðaçäåë).

ñâяçûâaíèåì. ×òîáû âûçâaòü ìåòîä êëañña daemOn, ìîæíî èñïîëüçîâaòü яâíîå ïðå- îáðaçîâaíèå òèïa óêaçaòåëя:


((daemOn * p))->draw(1, 1, 1, 1);
Ýòî íå âñåãä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 ëþáîé ïðîèçâîäíûé êëaññ. Äðóãîé ïðèìåð — ñâяçíûé ñïèñîê óêaçaòåëåé ía ðaçëè÷íûå îáúåêòû èåðaðõèè, ñ êîòîðûì òðåáóåòñя ðaáîòaòü åäèíîîáðaçíî.
 C++ ðåaëèçîâaí ìåõaíèçì ïîçäíåãî ñâяçûâaíèя, êîãäa ðaçðåøåíèå ññûëîê ía ìåòîä ïðîèñõîäèò ía ýòaïå âûïîëíåíèя ïðîãðaììû â çaâèñèìîñòè îò êîíêðåòíî- ãî òèïa îáúåêòa, âûçâaâøåãî ìåòîä. Ýòîò ìåõaíèçì ðåaëèçîâaí ñ ïîìîùüþ âèðòó- aëüíûõ ìåòîäîâ è ðaññìîòðåí â ñëåäóþùåì ðaçäåëå.
Äëя îïðåäåëåíèя âèðòóaëüíîãî ìåòîäa èñïîëüçóåòñя ñïåöèôèêaòîð virtual, ía- ïðèìåð:
virtual vOid draw(int x, int y, int sCale, int pOsitiOn);
Ðaññìîòðèì ïðaâèëa îïèñaíèя è èñïîëüçîâaíèя âèðòóaëüíûõ ìåòîäîâ.

  • Åñëè â áaçîâîì êëaññå ìåòîä îïðåäåëåí êaê âèðòóaëüíûé, ìåòîä, îïðåäåëåííûé â ïðîèçâîäíîì êëaññå ñ òåì xå èìåíåì è í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ñña ñ ïîìîùüþ îïåðaöèè äîñòóïa ê îáëañòè âèäèìîñòè.

  • Âèðòóaëüíûé ìåòîä íå ìîæåò îáúяâëяòüñя ñ ìîäèôèêaòîðîì statiC, íî ìîæåò áûòü îáúяâëåí êaê äðóæåñòâåííûé.

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

×èñòî âèðòóaëüíûñ ìåòîä ñîäåðæèò ïðèçíaê = 0 âìåñòî òåëa, íaïðèìåð:
virtual vOid f(int) = 0;
×èñòî âèðòóaëüíûé ìåòîä äîëæåí ïåðåîïðåäåëяòüñя â ïðîèçâîäíîì êëaññå (âîç- ìîæíî, îïяòü êaê ÷èñòî âèðòóaëüíûé).
Åñëè îïðåäåëèòü ìåòîä draw â êëaññå mOnstr êaê âèðòóaëüíûé, ðåøåíèå î òîì, ìå- òîä êaêîãî êëañña âûçâaòü, áóäåò ïðèíèìaòüñя â çaâèñèìîñòè îò òèïa îáúåêòa, ía êîòîðûé ññûëaåòñя óêaçaòåëü:
mOnstr *r, *p;
r = new mOnstr; // Cîçäaåòñя îáúåêò êëañña mOnstr
p = new daemOn; // Cîçäaåòñя îáúåêò êëañña daemOn r->draw(1, 1, 1, 1); // Âûçûâaåòñя ìåòîä mOnstr::draw
p->draw(1, 1, 1, 1); // Âûçûâaåòñя ìåòîä daemOn::draw

p-> mOnstr::draw(1, 1, 1, 1); // Îáõîä ìåõaíèçìa âèðòóaëüíûõ ìåòîäîâ


Åñëè îáúåêò êëañña daemOn áóäåò âûçûâaòü ìåòîä draw íå íåïîñðåäñòâåííî, a êîñ- âåííî (òî åñòü èç äðóãîãî ìåòîäa, îïðåäåëåííîãî â êëaññå mOnstr), áóäåò âûçâaí ìåòîä draw êëañña daemOn.
Èòaê, âèðòóaëüíûì íaçûâaåòñя ìåòîä, ññûëna ía nîòîðûñ ðaçðåøaåòñя ía ýòaïå âûïîëíåíèя ïðîãðaììû (ïåðåâîä êðañèâîãî aíãëèéñêîãî ñëîâa virtual — â äaííîì çía÷åíèè âñåãî-íaâñåãî «ôaêòè÷åñêèé», òî åñòü ññûëêa ðaçðåøaåòñя ïî ôaêòó âû- çîâa).



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   118   119   120   121   122   123   124   125   ...   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