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


Передача имен функций в качестве параметров



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

Передача имен функций в качестве параметров


Ôóíêöèþ ìîæíî âûçâaòü ÷åðåç óêaçaòåëü ía íåå. Äëя ýòîãî îáúяâëяåòñя óêaça- òåëü ñîîòâåòñòâóþùåãî òèïa è åìó ñ ïîìîùüþ îïåðaöèè âçяòèя aäðåña ïðèñâaè- âaåòñя aäðåñ ôóíêöèè:
vOid f(int a ){ /* ¼ */ } // îïðåäåëåíèå ôóíêöèè vOid (*pf)(int); // óêaçaòåëü ía ôóíêöèþ

pf = &f; // óêaçaòåëþ ïðèñâaèâaåòñя aäðåñ ôóíêöèè
// (ìîæíî íaïèñaòü pf = f;)
pf(10); // ôóíêöèя f âûçûâaåòñя ÷åðåç óêaçaòåëü pf
// (ìîæíî íaïèñaòü (*pf)(10) )
Äëя òîãî ÷òîáû ñäåëaòü ïðîãðaììó ëåãêî ÷èòaåìîé, ïðè îïèñaíèè óêaçaòåëåé ía ôóíêöèè èñïîëüçóþò ïåðåèìåíîâaíèå òèïîâ (typedef). Ìîæíî îáúяâëяòü ìaññè- âû óêaçaòåëåé ía ôóíêöèè (ýòî ìîæåò áûòü ïîëåçíî, íaïðèìåð, ïðè ðåaëèçaöèè ìåíþ):
// Îïèñaíèå òèïa PF êaê óêaçaòåëя
// ía ôóíêöèþ ñ îäíèì ïaðaìåòðîì òèïa int: typedef vOid (*PF)(int);
// Îïèñaíèå è èíèöèaëèçaöèя ìaññèâa óêaçaòåëåé: PF menu[] = {&new, &Open, &save};
menu[1](10); // Âûçîâ ôóíêöèè Open

Çäåñü new, Open è save — èìåía ôóíêöèé, êîòîðûå äîëæíû áûòü îáúяâëåíû ðaíåå.


Óêaçaòåëè ía ôóíêöèè ïåðåäaþòñя â ïîäïðîãðaììó òaêèì æå îáðaçîì, êaê è ïa- ðaìåòðû äðóãèõ òèïîâ:
inClude typedef vOid (*PF)(int);
vOid f1(PF pf){ // ôóíêöèя f1 ïîëó÷aåò â êa÷åñòâå ïaðaìåòða óêaçaòåëü òèïa PF pf(5); //âûçîâ ôóíêöèè, ïåðåäaííîé ÷åðåç óêaçaòåëü
}
vOid f(int i ){COut << i;} int main(){
f1(f); 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- æåíèя:
int f(int a, intb= 0);
vOid f1(int, int = 100, Char* = 0); /* îáðaòèòå âíèìaíèå ía ïðîáåë ìåæäó * è
= (áåç íåãî ïîëó÷èëañü áû îïåðaöèя ñëîæíîãî ïðèñâaèâaíèя *=) */
vOid err(int errValue = errnO); // errnO — ãëîáaëüíaя ïåðåìåííaя

f(100); f(a, 1); // âaðèaíòû âûçîâa ôóíêöèè f f1(a); f1(a, 10); f1(a, 10, "Vasia"); // âaðèaíòû âûçîâa ôóíêöèè f1 f1(a,,"Vasia") // íåâåðíî!

Download 2 Mb.

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