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



Download 2 Mb.
bet47/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   43   44   45   46   47   48   49   50   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Функции


Ôóínöèè èñïîëüçóþòñя äëя íaâåäåíèя ïîðяäna â õaîñå aëãîðèòìîâ.
Á. Còðaóñòðóï


Объявление и определение функций


Ôóíêöèя — ýòî èìåíîâaííaя ïîñëåäîâaòåëüíîñòü îïèñaíèé è îïåðaòîðîâ, âû- ïîëíяþùaя êaêîå-ëèáî çaêîí÷åííîå äåéñòâèå. Ôóíêöèя ìîæåò ïðèíèìaòü ïaða- ìåòðû è âîçâðaùaòü çía÷åíèå.
Ëþáaя ïðîãðaììa ía C++ ñîñòîèò èç ôóíêöèé, îäía èç êîòîðûõ äîëæía èìåòü èìя main (ñ íåå ía÷èíaåòñя âûïîëíåíèå ïðîãðaììû). Ôóíêöèя ía÷èíaåò âûïîë- íяòüñя â ìîìåíò âûçîâa. Ëþáaя ôóíêöèя äîëæía áûòü îáúяâëåía è îïðåäåëåía. Êaê è äëя äðóãèõ âåëè÷èí, îáúяâëåíèé ìîæåò áûòü íåñêîëüêî, a îïðåäåëåíèå òîëüêî îäíî. Îáúяâëåíèå ôóíêöèè äîëæíî íaõîäèòüñя â òåêñòå ðaíüøå åå âûçîâa äëя òîãî, ÷òîáû êîìïèëяòîð ìîã îñóùåñòâèòü ïðîâåðêó ïðaâèëüíîñòè âûçîâa.
Îáúяâëåíèå ôóínöèè (ïðîòîòèï, çaãîëîâîn, ñèãíaòóða) çaäaåò åå èìя, òèï âîçâða- ùaåìîãî çía÷åíèя è ñïèñîê ïåðåäaâaåìûõ ïaðaìåòðîâ. Îïðåäåëåíèå ôóínöèè ñî- äåðæèò, êðîìå îáúяâëåíèя, òåëî ôóíêöèè, ïðåäñòaâëяþùåå ñîáîé ïîñëåäîâa- òåëüíîñòü îïåðaòîðîâ è îïèñaíèé â ôèãóðíûõ ñêîáêaõ:
[ êëaññ ] òèï èìя ([ ñïèñîê_ïaðaìåòðîâ ])[throw ( èñêëþ÷åíèя )]
{ òåëî ôóíêöèè }
Ðaññìîòðèì ñîñòaâíûå ÷añòè îïðåäåëåíèя.
C ïîìîùüþ íåîáяçaòåëüíîãî ìîäèôèêaòîða êëaññ ìîæíî яâíî çaäaòü îáëañòü âèäèìîñòè ôóíêöèè, èñïîëüçóя êëþ÷åâûå ñëîâa extern è statiC:

extern ãëîáaëüíaя âèäèìîñòü âî âñåõ ìîäóëяõ ïðîãðaììû (ïî óìîë÷a- íèþ);


statiC âèäèìîñòü òîëüêî â ïðåäåëaõ ìîäóëя, â êîòîðîì îïðåäåëåía ôóíêöèя.
Òèï âîçâðaùaåìîãî ôóíêöèåé çía÷åíèя ìîæåò áûòü ëþáûì, êðîìå ìaññèâa è ôóíêöèè (íî ìîæåò áûòü óêaçaòåëåì ía ìaññèâ èëè ôóíêöèþ). Åñëè ôóíêöèя íå äîëæía âîçâðaùaòü çía÷åíèå, óêaçûâaåòñя òèï vOid.
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çäåëå «Cïè- ñîê èñêëþ÷åíèé ôóíêöèè», ñ. 227.
 îïðåäåëåíèè, â îáúяâëåíèè è ïðè âûçîâå îäíîñ è òîñ æå ôóínöèè òèïû è ïîðяäî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ê âñòðîåííóþ ñ ïîìîùüþ ìîäèôèêaòîða inline, êîòîðûé ðåêîìåíäóåò êîìïèëяòîðó âìåñòî îáðaùåíèя ê ôóíêöèè ïîìåùaòü åå êîä íåïîñðåäñòâåííî â êaæäóþ òî÷êó âûçîâa. Ìîäèôèêaòîð inline ñòaâèòñя ïå- ðåä òèïîì ôóíêöèè. Îí ïðèìåíяåòñя äëя êîðîòêèõ ôóíêöèé, ÷òîáû ñíèçèòü ía- êëaäíûå ðañõîäû ía âûçîâ (ñîõðaíåíèå è âîññòaíîâëåíèå ðåãèñòðîâ, ïåðåäa÷a óïðaâëåíèя). Äèðåêòèâa inline íîñèò ðåêîìåíäaòåëüíûé õaðaêòåð è âûïîëíяåòñя êîìïèëяòîðîì ïî ìåðå âîçìîæíîñòè. Èñïîëüçîâaíèå inline-ôóíêöèé ìîæåò óâå- ëè÷èòü îáúåì èñïîëíяåìîé ïðîãðaììû. Îïðåäåëåíèå ôóíêöèè äîëæíî ïðåäøå- ñòâîâaòü åå âûçîâaì, èía÷å âìåñòî inline-ð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÷åíèя íå vOid, îía ìîæåò âõîäèòü â ñîñòaâ âûðaæåíèé èëè, â ÷añòíîì ñëó÷aå, ðañïîëaãaòüñя â ïðaâîé ÷añòè îïåðaòîða ïðèñâaèâaíèя.
Ïðèìåð ôóíêöèè, âîçâðaùaþùåé ñóììó äâóõ öåëûõ âåëè÷èí:
inClude
int sum(int a, int b); // îáúяâëåíèå ôóíêöèè int main(){
inta= 2,b= 3, C, d;
C = sum(a, b); // âûçîâ ôóíêöèè Cin >> d;
COut << sum(C, d); // âûçîâ ôóíêöèè

return 0;


}
int sum(int a, int b){ // îïðåäåëåíèå ôóíêöèè return (a + b);
}
Ïðèìåð ôóíêöèè, âûâîäяùåé ía ýêðaí ïîëя ïåðåäaííîé åé ñòðóêòóðû:
inClude struCt WOrker{
Char fiO[30]; int date, COde; dOuble salary;
};
vOid print_wOrker(WOrker); //îáúяâëåíèå ôóíêöèè int main(){
WOrker stuff[100];
… /* ôîðìèðîâaíèå ìaññèâa stuff */

fOr (inti= 0; i<100; i++)print_wOrker(stuff[i]); // âûçîâ ôóíêöèè return 0;


}
vOid print_wOrker(WOrker w){ //îïðåäåëåíèå ôóíêöèè
COut << w.fiO << ' ' << w.date << ' ' << w.COde << ' ' << w.salary << endl;
}
Âñå âåëè÷èíû, îïèñ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:
inClude vOid f(int a){
intm= 0;
COut << "n m p\n"; while (a--){
statiC intn= 0; intp= 0;
COut << n++ << ' ' << m++ << ' ' << p++ << '\n';
}
}
int main(){ f(3); f(2); return 0;}

Còaòè÷åñêaя ïåðåìåííaя n ðaçìåùaåòñя â ñåãìåíòå äaííûõ è èíèöèaëèçèðóåòñя îäèí ðaç ïðè ïåðâîì âûïîëíåíèè îïåðaòîða, ñîäåðæaùåãî åå îïðåäåëåíèå. Àâòî- ìaòè÷åñêaя ïåðåìåííaя m èíèöèaëèçèðóåòñя ïðè êaæäîì âõîäå â ôóíêöèþ. Àâòî- ìaòè÷åñêaя ïåðåìåííaя p èíèöèaëèçèðóåòñя ïðè êaæäîì âõîäå â áëîê öèêëa. Ïðîãðaììa âûâåäåò ía ýêðaí:


nmp 000
110
220
nmp 300
410
Ïðè ñîâìåñòíîñ ðaáîòå ôóínöèè äîëæíû îáìåíèâaòüñя èíôîðìaöèåñ. Ýòî ìîæ- íî îñóùåñòâèòü ñ ïîìîùüþ ãëîáaëüíûõ ïåðåìåííûõ, ÷åðåç ïaðaìåòðû è ÷åðåç âîç- âðaùaåìîå ôóínöèåñ çía÷åíèå.



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   43   44   45   46   47   48   49   50   ...   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