3-ma'ruza funktsiyalar va sinflardan foydalanish. Funktsiya deklaratsiyasi. Funktsiya chaqiruvi. Funktsiyalar uchun bekor qilish sarlavha fayli. Standart sarlavha fayllari. Standart sinflardan foydalanish. Reja


Funktsiyani chaqirish operatoriga misol. Lekin


Download 137.72 Kb.
bet3/15
Sana09.03.2023
Hajmi137.72 Kb.
#1255999
1   2   3   4   5   6   7   8   9   ...   15
Bog'liq
Лек 3узб

Funktsiyani chaqirish operatoriga misol. Lekin cube() qiymatni qaytargani uchun main() uni tayinlash bayonotining bir qismi sifatida ishlatishi mumkin:
ikki qavatli hajm = kub (yon);
Ammo yuqorida aytib o'tilganidek, siz prototiplarga e'tibor qaratishingiz kerak. Prototiplar haqida nimani bilishingiz kerak? Birinchidan, nima uchun C++ ularni talab qilishni tushunishingiz kerak. Keyin, C++ prototiplarni talab qilganligi sababli, ularni yozish uchun to'g'ri sintaksisni bilishingiz kerak . ­Va nihoyat, ular sizga beradigan narsalarni baholashingiz kerak. Keling, ushbu savollarning har birini navbatma-navbat ko'rib chiqamiz va 7.2 Listingni muhokama qilish uchun asos qilib olamiz.
Nega prototiplar kerak?
Prototip funksiyaning kompilyatorga interfeysini tavsiflaydi. Ya'ni, kompilyatorga funksiyaning qaytish turi, agar mavjud bo'lsa, qanday ekanligini, shuningdek, ­funktsiya argumentlarining soni va turlarini aytadi. Misol uchun, prototip 7.2 ro'yxatidagi funksiya chaqiruviga qanday ta'sir qilishini ko'rib chiqing:
ikki qavatli hajm = kub (yon);
Birinchidan, prototip kompilyatorga kub() bir juft argument olishi kerakligini aytadi. Agar dastur ushbu argumentni taqdim etmasa, prototiplash ­kompilyatorga bunday xatolikni qo'lga kiritish imkonini beradi. Ikkinchidan, cube() funksiyasi hisoblashni tugatgandan so'ng, u qaytish qiymatini ma'lum bir joyga qo'yadi - ehtimol CPU registriga, balki xotiraga. Chaqiruvchi funktsiya - bu holda main() - keyin o'sha joydan qiymatni oladi. Prototip cube() ning double turi ekanligini bildirganligi sababli, kompilyator qancha bayt ajratib olishni va ularni qanday izohlashni biladi. Ushbu ma'lumotsiz u faqat taxmin qila oladi va bu umuman qilmasligi kerak bo'lgan narsa.
Ammo siz hali ham hayron bo'lishingiz mumkin: nega kompilyatorga pro ­-tip kerak? U faqat faylni ko'rib chiqa olmaydi va funktsiya qanday aniqlanganligini ko'ra oladimi? Ushbu yondashuvning bir muammosi shundaki, u unchalik samarali emas. Kompilyator faylning qolgan qismini o'qiyotganda main() kompilyatsiyasini to'xtatib turishi kerak edi. Biroq, yanada jiddiy muammo bor: funktsiyalar bir xil faylda bo'lmasligi mumkin. C++ dasturini mustaqil ravishda kompilyatsiya qilinadigan va keyinchalik bitta bajariladigan dasturga birlashtiriladigan bir nechta fayllarga bo'lish imkonini beradi.
Prototip sintaksisi
Funktsiya prototipi - bu bayonot, shuning uchun u nuqta- ­vergul bilan tugashi kerak. Prototipni olishning eng oson yo'li funksiya sarlavhasini uning ta'rifidan nusxalash va nuqta-vergul qo'shishdir. Listing 7.2 dagi dastur kub() funksiyasi bilan shunday qiladi:
er-xotin kub (er-xotin x); // qo'shilgan; prototipni olish uchun sarlavhaga
Biroq, funktsiya prototipi o'zgaruvchan parametr nomlarini berishni talab qilmaydi; turlari ro'yxati yetarli. Faqat argument turidan foydalangan holda cheers() 7.2 prototiplarini ro'yxatga olish:
void cheers(int);//prototipda siz o'zgaruvchan parametrlarning nomlarini qoldirishingiz mumkin
argumentlar ro'yxatiga kiritishingiz yoki kiritmasligingiz mumkin . ­Prototipdagi o'zgaruvchilar nomlari faqat argumentning joylashuvini ko'rsatish uchun xizmat qiladi, shuning uchun ular berilgan bo'lsa, ular funktsiya ta'rifidagi nomlarga mos kelishi shart emas.
C++ va ANSI C da prototiplarni solishtirish
ANSI C prototipi C++ dan olingan, ammo ikki til o'rtasida farqlar mavjud. Eng muhimi , klassik C bilan moslikni saqlab qolgan holda, ­ANSI C prototiplashni ixtiyoriy deb hisoblaydi, C++ esa prototiplashni talab qiladi. Masalan, quyidagi funktsiya deklaratsiyasini ko'rib chiqing:
bekor say_hi();
C++ da bo'sh qavslar void kalit so'zini belgilash bilan bir xil ma'noni anglatadi ular orasida. Bu ­funktsiyaning argumentlari yo'qligini anglatadi. ANSI C da bo'sh qavslar shunchaki argumentlar ro'yxati ­ko'rsatilmaganligini bildiradi - siz buni unutgan bo'lishingiz mumkin yoki funktsiyada o'zgaruvchan argumentlar soni mavjud. Buning C++ ekvivalenti quyidagicha ko'rinadi:
void say_bye(...); // C++ javobgarlikni rad etadi

Download 137.72 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   15




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling