Êaæäûé îáúåêò ñîäåðæèò ñâîé ýêçåìïëяð ïîëåé êëañña. Ìåòîäû êëañña íaõîäяò- ñя â ïaìяòè â åäèíñòâåííîì ýêçåìïëяðå è èñïîëüçóþòñя âñåìè îáúåêòaìè ñîâìå- ñòíî, ïîýòîìó íåîáõîäèìî îáåñïå÷èòü ðaáîòó ìåòîäîâ ñ ïîëяìè èìåííî òîãî îáú- åêòa, äëя êîòîðîãî îíè áûëè âûçâaíû. Ýòî îáåñïå÷èâaåòñя ïåðåäa÷åé â ôóíêöèþ ñêðûòîãî ïaðaìåòða this, â êîòîðîì õðaíèòñя êîíñòaíòíûé óêaçaòåëü ía âûçâaâ- øèé ôóíêöèþ îáúåêò. Óêaçaòåëü this íåяâíî èñïîëüçóåòñя âíóòðè ìåòîäa äëя ññûëîê ía ýëåìåíòû îáúåêòa.  яâíîì âèäå ýòîò óêaçaòåëü ïðèìåíяåòñя â îñíîâ- íîì äëя âîçâðaùåíèя èç ìåòîäa óêaçaòåëя (return this;) èëè ññûëêè (return
*this;) ía âûçâaâøèé îáúåêò.
Äëя èëëþñòðaöèè èñïîëüçîâaíèя óêaçaòåëя this äîáaâèì â ïðèâåäåííûé âûøå êëaññ mOnstr íîâûé ìåòîä, âîçâðaùaþùèé ññûëêó ía íaèáîëåå çäîðîâîãî (ïîëå health) èç äâóõ ìîíñòðîâ, îäèí èç êîòîðûõ âûçûâaåò ìåòîä, a äðóãîé ïåðåäaåòñя åìó â êa÷åñòâå ïaðaìåòða (ìåòîä íóæíî ïîìåñòèòü â ñåêöèþ publiC îïèñaíèя êëañña):
mOnstr & the_best(mOnstr &M){
if( health > M.get_health()) return *this; return M;
}
… mOnstr Vasia(50), Super(200);
// Íîâûé îáúåêò Best èíèöèaëèçèðóåòñя çía÷åíèяìè ïîëåé Super: mOnstr Best = Vasia.the_best(Super);
Óêaçaòåëü this ìîæíî òaêæå ïðèìåíяòü äëя èäåíòèôèêaöèè ïîëя êëañña â òîì ñëó÷aå, êîãäa åãî èìя ñîâïaäaåò ñ èìåíåì ôîðìaëüíîãî ïaðaìåòða ìåòîäa. Äðóãîé ñïîñîá èäåíòèôèêaöèè ïîëя èñïîëüçóåò îïåðaöèþ äîñòóïa ê îáëañòè âèäèìîñòè:
vOid Cure(int health, int ammO){
this -> health += health; // Èñïîëüçîâaíèå this mOnstr:: ammO += ammO; // Èñïîëüçîâaíèå îïåðaöèè ::
}
Конструкторы
Êîíñòðóêòîð ïðåäíaçía÷åí äëя èíèöèaëèçaöèè îáúåêòa è âûçûâaåòñя aâòîìaòè-
÷åñêè ïðè åãî ñîçäaíèè. Íèæå ïåðå÷èñëåíû îñíîâíûå ñâîéñòâa êîíñòðóêòîðîâ.
Êîíñòðóêòîð íå âîçâðaùaåò çía÷åíèå, äaæå òèïa vOid. Íåëüçя ïîëó÷èòü óêaça- òåëü ía êîíñòðóêòîð.
Êëaññ ìîæåò èìåòü íåñnîëünî nîíñòðónòîðîâ ñ ðaçíûìè ïaðaìåòðaìè äëя ðaç- íûõ âèäîâ èíèöèaëèçaöèè (ïðè ýòîì èñïîëüçóåòñя ìåõaíèçì ïåðåãðóçêè).
Êîíñòðóêòîð, âûçûâaåìûé áåç ïaðaìåòðîâ, íaçûâaåòñя nîíñòðónòîðîì ïî óìîë÷aíèþ.
Ïaðaìåòðû nîíñòðónòîða ìîãóò èìåòü ëþáîé òèï, êðîìå ýòîãî æå êëañña. Ìîæíî çaäaâaòü çía÷åíèя ïaðaìåòðîâ ïî óìîë÷aíèþ. Èõ ìîæåò ñîäåðæaòü òîëüêî îäèí èç êîíñòðóêòîðîâ.
Åñëè ïðîãðaììèñò íå óêaçaë íè îäíîãî êîíñòðóêòîða, êîìïèëяòîð ñîçäaåò åãî aâòîìaòè÷åñnè. Òaêîé êîíñòðóêòîð âûçûâaåò êîíñòðóêòîðû ïî óìîë÷aíèþ äëя ïîëåé êëañña è êîíñòðóêòîðû ïî óìîë÷aíèþ áaçîâûõ êëaññîâ (ñì. ðaçäåë
«Ïðîñòîå íañëåäîâaíèå», ñ. 201).  ñëó÷aå, êîãäa êëaññ ñîäåðæèò êîíñòaíòû èëè ññûëêè, ïðè ïîïûòêå ñîçäaíèя îáúåêòa êëañña áóäåò âûäaía îøèáêa, ïî- ñêîëüêó èõ íåîáõîäèìî èíèöèaëèçèðîâaòü êîíêðåòíûìè çía÷åíèяìè, a êîí- ñòðóêòîð ïî óìîë÷aíèþ ýòîãî äåëaòü íå óìååò.
Êîíñòðónòîðû íå íañëåäóþòñя.
Êîíñòðóêòîðû íåëüçя îïèñûâaòü ñ ìîäèôèêaòîðaìè COnst, virtual è statiC.
Êîíñòðóêòîðû ãëîáaëüíûõ îáúåêòîâ âûçûâaþòñя äî âûçîâa ôóíêöèè main. Ëîêaëüíûå îáúåêòû ñîçäaþòñя, êaê òîëüêî ñòaíîâèòñя aêòèâíîé îáëañòü èõ äåéñòâèя. Êîíñòðóêòîð çaïóñêaåòñя è ïðè ñîçäaíèè âðåìåííîãî îáúåêòa (ía- ïðèìåð, ïðè ïåðåäa÷å îáúåêòa èç ôóíêöèè).
Êîíñòðóêòîð âûçûâaåòñя, åñëè â ïðîãðaììå âñòðåòèëañü êaêaя-ëèáî èç ñèí- òaêñè÷åñêèõ êîíñòðóêöèé:
Do'stlaringiz bilan baham: |