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



Download 2 Mb.
bet52/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   48   49   50   51   52   53   54   55   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Перегрузка функций


×añòî áûâaåò óäîáíî, ÷òîáû ôóíêöèè, ðåaëèçóþùèå îäèí è òîò æå aëãîðèòì äëя ðaçëè÷íûõ òèïîâ äaííûõ, èìåëè îäíî è òî æå èìя. Åñëè ýòî èìя ìíåìîíè÷íî, òî åñòü íåñåò íóæíóþ èíôîðìaöèþ, ýòî äåëaåò ïðîãðaììó áîëåå ïîíяòíîé, ïîñêîëü- êó äëя êaæäîãî äåéñòâèя òðåáóåòñя ïîìíèòü òîëüêî îäíî èìя. Èñïîëüçîâaíèå íå- ñêîëüêèõ ôóíêöèé ñ îäíèì è òåì æå èìåíåì, íî ñ ðaçëè÷íûìè òèïaìè ïaðaìåò- ðîâ, íaçûâaåòñя ïåðåãðóçnîñ ôóínöèñ.
Êîìïèëяòîð îïðåäåëяåò, êaêóþ èìåííî ôóíêöèþ òðåáóåòñя âûçâaòü, ïî òèïó ôaêòè÷åñêèõ ïaðaìåòðîâ. Ýòîò ïðîöåññ íaçûâaåòñя ðaçðåøåíèåì ïåðåãðóçêè (ïå- ðåâîä aíãëèéñêîãî ñëîâa resolution â ñìûñëå «óòî÷íåíèå»). Òèï âîçâð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èáîëüøåå èç äâóõ öåëûõ:
int max(int, int);
// Âîçâðaùaåò ïîäñòðîêó íaèáîëüøåé äëèíû:
Char* max(Char*, Char*);
// Âîçâðaùaåò íaèáîëüøåå èç ïåðâîãî ïaðaìåòða è äëèíû âòîðîãî: int max (int, Char*);
// Âîçâðaùaåò íaèáîëüøåå èç âòîðîãî ïaðaìåòða è äëèíû ïåðâîãî: int max (Char*, int);
vOid f(int a, int b, Char* C, Char* d){
COut << max (a, b) << max(C, d) << max(a, C) << max(C, b);
}
Ïðè âûçîâå ôóíêöèè max êîìïèëяòîð âûáèðaåò ñîîòâåòñòâóþùèé òèïó ôaêòè÷å- ñêèõ ïaðaìåòðîâ âaðèaíò ôóíêöèè (â ïðèâåäåííîì ïðèìåðå áóäóò ïîñëåäîâa- òåëüíî âûçâaíû âñå ÷åòûðå âaðèaíòa ôóíêöèè).
Åñëè òî÷íîãî ñîîòâåòñòâèя íå íaéäåíî, âûïîëíяþòñя ïðîäâèæåíèя òèïîâ â ñîîò- âåòñòâèè ñ îáùèìè ïðaâèëaìè (ñì. ñ. 38 è ïðèëîæåíèå 3), íaïðèìåð, bOOl è Char â int, flOat â dOuble è ò. ï. Äaëåå âûïîëíяþòñя ñòaíäaðòíûå ïðåîáðaçîâaíèя òè- ïîâ, íaïðèìåð, int â dOuble èëè óêaçaòåëåé â vOid*. Cëåäóþùèì øaãîì яâëяåòñя âûïîëíåíèå ïðåîáðaçîâaíèé òèïa, çaäaííûõ ïîëüçîâaòåëåì (îá ýòèõ ïðåîáðaçî- âaíèяõ ðaññêaçûâaåòñя âî âòîðîé ÷añòè êíèãè, ñ. 195), a òaêæå ïîèñê ñîîòâåòñò- âèé ça ñ÷åò ïåðåìåííîãî ÷èñëa aðãóìåíòîâ ôóíêöèé. Åñëè ñîîòâåòñòâèå ía îäíîì è òîì æå ýòaïå ìîæåò áûòü ïîëó÷åíî áîëåå ÷åì îäíèì ñïîñîáîì, âûçîâ ñ÷èòaåòñя íåîäíîçía÷íûì è âûäaåòñя ñîîáùåíèå îá îøèáêå.
Íåîäíîçía÷íîñòü ìîæåò ïîяâèòüñя ïðè:

  • ïðåîáðaçîâaíèè òèïa;

  • èñïîëüçîâaíèè ïaðaìåòðîâ-ññûëîê;

  • èñïîëüçîâaíèè aðãóìåíòîâ ïî óìîë÷aíèþ.

Ïðèìåð íåîäíîçía÷íîñòè ïðè ïðåîáðaçîâaíèè òèïa:


inClude flOat f(flOat i){
COut << "funCtiOn flOat f(flOat i)" << endl; return i;
}
dOuble f(dOuble i){
COut << "funCtiOn dOuble f(dOuble i)" << endl; return i*2;
}
int main(){
flOat x = 10.09; dOuble y = 10.09;
COut << f(x) << endl; // Âûçûâaåòñя f(flOat) COut << f(y) << endl; // Âûçûâaåòñя f(dOuble)
/* COut << f(10) << endl; Íåîäíîçía÷íîñòü — êaê ïðåîáðaçîâaòü 10: âî flOat èëè dOuble? */
return 0;
}
Äëя óñòðaíåíèя ýòîé íåîäíîçía÷íîñòè òðåáóåòñя яâíîå ïðèâåäåíèå òèïa äëя êîíñòaíòû 10.
Ïðèìåð íåîäíîçía÷íîñòè ïðè èñïîëüçîâaíèè ïaðaìåòðîâ-ññûëîê: åñëè îäía èç ïåðåãðóæaåìûõ ôóíêöèé îáúяâëåía êaê int f(int a, int b), a äðóãaя — êaê int f(int a, int &b), òî êîìïèëяòîð íå ñìîæåò óçíaòü, êaêaя èç ýòèõ ôóíêöèé âûçûâa- åòñя, òaê êaê íåò ñèíòaêñè÷åñêèõ ðaçëè÷èé ìåæäó âûçîâîì ôóíêöèè, êîòîðaя ïî- ëó÷aåò ïaðaìåòð ïî çía÷åíèþ, è âûçîâîì ôóíêöèè, êîòîðaя ïîëó÷aåò ïaðaìåòð ïî ññûëêå.
Ïðèìåð íåîäíîçía÷íîñòè ïðè èñïîëüçîâaíèè aðãóìåíòîâ ïî óìîë÷aíèþ:
inClude int f(int a){return a;}
int f(int a, int b = 1){returna* b;} int main(){
COut << f(10, 2); // Âûçûâaåòñя f(int, int)
/* COut << f(10); Íåîäíîçía÷íîñòü — ÷òî âûçûâaåòñя: f(int, int) èëè f(int) ? */
return 0;
}
Íèæå ïðèâåäåíû ïð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- åòñя òîëüêî ìîäèôènaòîðîì COnst èëè èñïîëüçîâaíèåì ññûënè (íaïðèìåð, int è COnst int èëè int è int&).




Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   48   49   50   51   52   53   54   55   ...   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