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



Download 2 Mb.
bet105/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   101   102   103   104   105   106   107   108   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

ГЛАВА 4


Классы
 ýòîé ãë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ìè1. Ïîëя è ìåòîäû íaçûâaþòñя ýëåìåíòaìè nëañña. Îïèña- íèå êëañña â ïåðâîì ïðèáëèæåíèè âûãëяäèò òaê:
class <èìя>{
[ private: ]
<îïèñaíèå ñêðûòûõ ýëåìåíòîâ> public:
<îïèñaíèå äîñòóïíûõ ýëåìåíòîâ>
}; // Îïèñaíèå çaêaí÷èâaåòñя òî÷êîé ñ çaïяòîé
Cïåöèôèêaòîðû äîñòóïa private è publiC óïðaâëяþò âèäèìîñòüþ ýëåìåíòîâ êëañ- ña. Ýëåìåíòû, îïèñaííûå ïîñëå ñëóæåáíîãî ñëîâa private, âèäèìû òîëüêî âíóòðè êëañña. Ýòîò âèä äîñòóïa ïðèíяò â êëaññå ïî óìîë÷aíèþ. Èíòåðôåéñ êëañña îïè-


1  ëèòåðaòóðå ÷aùå âñòðå÷aþòñя òåðìèíû «äaííûå-÷ëåíû» è «ôóíêöèè-÷ëåíû», a òaêæå
«êîìïîíåíòíûå äaííûå» è «êîìïîíåíòíûå ôóíêöèè», íî ïî íåîáúяñíèìûì ïðè÷èíaì я ïðåäïî÷èòaþ «ïîëя» è «ìåòîäû».  òåõ ñëó÷aяõ, êîãäa èç êîíòåêñòa ïîíяòíî, ÷òî ðå÷ü èäåò î ôóíêöèяõ-÷ëåíaõ êëañña, a íå îá îáû÷íûõ ôóíêöèяõ, ìåòîäû íaçûâaþòñя ïðîñòî
«ôóíêöèяìè».

ñûâaåòñя ïîñëå ñïåöèôèêaòîða publiC. Äåéñòâèå ëþáîãî ñïåöèôèêaòîða ðañïðî- ñòðaíяåòñя äî ñëåäóþùåãî ñïåöèôèêaòîða èëè äî êîíöa êëañña. Ìîæíî çaäaâaòü íåñêîëüêî ñåêöèé private è publiC, ïîðяäîê èõ ñëåäîâaíèя çía÷åíèя íå èìååò.


Ïîëя nëañña:

  • ìîãóò èìåòü ëþáîé òèï, êðîìå òèïa ýòîãî æå êëañña (íî ìîãóò áûòü óêaçaòå- ëяìè èëè ññûëêaìè ía ýòîò êëaññ);

  • ìîãóò áûòü îïèñaíû ñ ìîäèôèêaòîðîì COnst, ïðè ýòîì îíè èíèöèaëèçèðóþò- ñя òîëüêî îäèí ðaç (ñ ïîìîùüþ êîíñòðóêòîða) è íå ìîãóò èçìåíяòüñя;

  • ìîãóò áûòü îïèñaíû ñ ìîäèôèêaòîðîì statiC (îá ýòîì ðaññêaçûâaåòñя â ðaç- äåëå «Còaòè÷åñêèå ïîëя», ñ. 186), íî íå êaê autO, extern è register.

Èíèöèaëèçaöèя ïîëåé ïðè îïèñaíèè íå äîïóñêaåòñя.
Êëaññû ìîãóò áûòü ãëîáaëüíûìè (îáúяâëåííûìè âíå ëþáîãî áëîêa) è ëînaëüíû- ìè (îáúяâëåííûìè âíóòðè áëîêa, íaïðèìåð, ôóíêöèè èëè äðóãîãî êëañña).
Íèæå ïåðå÷èñëåíû íåêîòîðûå îñîáåííîñòè ëîêaëüíîãî êëañña:

  • âíóòðè ëîêaëüíîãî êëañña ìîæíî èñïîëüçîâaòü òèïû, ñòaòè÷åñêèå (statiC) è âíåøíèå (extern) ïåðåìåííûå, âíåøíèå ôóíêöèè è ýëåìåíòû ïåðå÷èñëåíèé èç îáë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ïðèìåð, êîëè÷åñòâî ùóïaëåö, ñèëó èëè íaëè÷èå ãðaíaòîìåòa) è ïîâåäåíèå. Åñòåñòâåííî, ïðèìåð áóäåò ñõåìaòè-
÷åí, ïîñêîëüêó ïðèâîäèòñя ëèøü äëя äåìîíñòðaöèè ñèíòaêñèña.
Class mOnstr{
int health, ammO; publiC:
mOnstr(int he = 100, int am = 10){ health = he; ammO = am;} vOid draw(int x, int y, int sCale, int pOsitiOn);
int get_health(){return health;} int get_ammO(){return ammO;}
};
 ýòîì êëaññå äâa ñêðûòûõ ïîëя — health è ammO, ïîëó÷èòü çía÷åíèя êîòîðûõ èç- âíå ìîæíî ñ ïîìîùüþ ìåòîäîâ get_health() è get_ammO(). Äîñòóï ê ïîëяì ñ ïîìî- ùüþ ìåòîäîâ â äaííîì ñëó÷aå êaæåòñя èñêóññòâåííûì óñëîæíåíèåì, íî íaäî ó÷èòûâaòü, ÷òî ïîëяìè ðåaëüíûõ êëaññîâ ìîãóò áûòü ñëîæíûå äèíaìè÷åñêèå ñòðóêòóðû, è ïîëó÷åíèå çía÷åíèé èõ ýëåìåíòîâ íå òaê òðèâèaëüíî. Êðîìå òîãî, î÷åíü âaæíîé яâëяåòñя âîçìîæíîñòü âíîñèòü â ýòè ñòðóêòóðû èçìåíåíèя, íå ça- òðaãèâaя èíòåðôåéñ êëañña.

Âñå ìåòîäû êëañña èìåþò íåïîñðåäñòâåííûé äîñòóï ê åãî ñêðûòûì ïîëяì, èíû- ìè ñëîâaìè, òåëa ôóíêöèé êëañña âõîäяò â îáëañòü âèäèìîñòè private ýëåìåíòîâ êëañña.


 ïðèâåäåííîì êëaññå ñîäåðæèòñя òðè îïðåäåëåíèя ìåòîäîâ è îäíî îáúяâëåíèå (ìåòîä draw). Åñëè òåëî ìåòîäa îïðåäåëåíî âíóòðè êëañña, îí яâëяåòñя âñòðîåí- íûì (inline). Êaê ïðaâèëî, âñòðîåííûìè äåëaþò êîðîòêèå ìåòîäû. Åñëè âíóòðè êëañña çaïèñaíî òîëüêî îáúяâëåíèå (çaãîëîâîê) ìåòîäa, ñaì ìåòîä äîëæåí áûòü îïðåäåëåí â äðóãîì ìåñòå ïðîãðaììû ñ ïîìîùüþ îïåðaöèè äîñòóïa ê îáëañòè âè- äèìîñòè (::):
vOid mOnstr::draw(int x, int y, int sCale, int pOsitiOn){
/* òåëî ìåòîäa */
}
Ìåòîä ìîæíî îïðåäåëèòü êaê âñòðîåííûé è âíå êëañña ñ ïîìîùüþ äèðåêòèâû
inline (êaê è äëя îáû÷íûõ ôóíêöèé, îía íîñèò ðåêîìåíäaòåëüíûé õaðaêòåð):
inline int mOnstr::get_ammO(){ return ammO;
}
 êaæäîì êëaññå åñòü õîòя áû îäèí ìåòîä, èìя êîòîðîãî ñîâïaäaåò ñ èìåíåì êëañ- ña. Îí íaçûâaåòñя nîíñòðónòîðîì è âûçûâaåòñя aâòîìaòè÷åñêè ïðè ñîçäaíèè îáúåêòa êëañña. Êîíñòðóêòîð ïðåäíaçía÷åí äëя èíèöèaëèçaöèè îáúåêòa. Àâòîìa- òè÷åñêèé âûçîâ êîíñòðóêòîða ïîçâîëяåò èçáåæaòü îøèáîê, ñâяçaííûõ ñ èñïîëü- çîâaíèåì íåèíèöèaëèçèðîâaííûõ ïåðåìåííûõ. Ìû ïîäðîáíî ðaññìîòðèì êîíñò- ðóêòîðû â ðaçäåëå «Êîíñòðóêòîðû», ñ. 182.
Òèïû äaííûõ struCt è uniOn яâëяþòñя âèäaìè êëañña, ðaçíèöa ìåæäó íèìè áóäåò îáúяñíåía ïîçæå, ía ñ. 210. Äðóãîé ïðèìåð îïèñaíèя êëañña, a òaêæå ïðèìåð ëî- êaëüíîãî êëañña ïðèâåäåí â ðaçäåëå «Cîçäaíèå øaáëîíîâ êëaññîâ» ía ñ. 211.



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   101   102   103   104   105   106   107   108   ...   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