Kitob uchta qismdan iborat. "Strukturali dasturlash", "Obyektli-yo’nalishli dasturlash", "Standart kutubxonalar"


Funksiyalarning ortiqcha yuklanishi



Download 333,2 Kb.
bet44/90
Sana10.07.2022
Hajmi333,2 Kb.
#770437
1   ...   40   41   42   43   44   45   46   47   ...   90
Bog'liq
C majmua

Funksiyalarning ortiqcha yuklanishi

Ma'lumotlar turli tiplari uchun bir algoritmni amalga oshiruvchi funksiyalarni ko'pincha bitta nom bilan atash qulay. Agar bu nom mnemonik bo'lsa, u holda zarur axborotni tashiydi, bu dastur tushunarli qiladi, chunki har bir amal uchun faqat bitta nomni eslab qolish talab etiladi. Bitta nomdagi, lekin turli tipli parametrlarga ega bir nechta funksiyalardan foydalanish funksiyalarni ortiqcha yuklash deb ataladi.


Kompilyator haqiqiy parametrlar tipi bo'yicha qanday funksiyalarni chaqirish lozimligini aniqlaydi. Bu jarayon ortiqcha yuklanishni hal qilish deb ataladi. Funksiya qaytaradigan qiymat tipi hal qilishda ishtirok etmaydi. Hal qilish mexanizmi qoidalarini yetarlicha qiyin jamlanmasiga asoslangan, ma'nosi eng muvofiq argumentlarga ega funksiyadan foydalanish va agar bunday bo'lmasa xabar berishga olib kelinadi. Faraz qilaylik, eng kata qiymatni aniqlovchi funksiyaning to'rtta variant mavjud bo'lsin:\

// ikkita butundan eng kattasini qaytaradi


int max(int, int);
// eng katta uzunlikdagi qism satrni qaytaradi
char* max(char*, char*);
// birinchi parametr va ikkinchi uzunlikdan eng kattasini qaytaradi
int max (int, char*);
// ikkinchi parametr va birinchi uzunlikdan eng kattasini qaytaradi
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 funksiyasini chaqirishda kompilyator haqiqiy parametrlar tipiga mos keluvchi funksiya variantini tanlaydi (keltirilgan misolda ketma-ket funksiyaning to'rtta varianti chaqiriladi).


Agar aniqmaslik topilmasa, umumiy qoidalarga mos tartib tiplarida harakat bajariladi, masalan, int ga bool va char, double ga float va h.k. Keyin tiplarning standart almashtirishlari bajariladi. Masalan, double ga int yoki void* ga ko'rsatgichlarni. Keyingi qadam foydalanuvchi barcha tip almashtirishlari bajariladi hamda funksiyaning argumentlari o'zgaruvchan soni hisobiga mosliklarni izlash bajariladi. Agar bitta bosqichda moslik bittadan ko'p usul bilan olingan bo'lsa, chaqirish bir qiymatli deb hisoblanadi va xato haqida xabar chiqariladi.
Bir qiymatli moslik bo'lmaslik:

Tipni almashtirishdagi bir qiymatli bo'lmaslikka misol

#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; // f(float) chaqiriladi
cout << f(y) << endl; // f(double) chaqiriladi
/* cout << f(10) << endl; Bir qiymatli bo'lmaslik – как преобразовать 10: во float yoki double? */
return 0;
}

Bu kamchilikni bartaraf etish uchun 10 konstanta uchun tipi oshkor keltirish talab etiladi.


Murojaat – parametrlardan foydalanganda bir qiymatli bo'lmaslik misoli: agar ortiqcha yuklanuvchi funksiyalardan biri int f(int a, int b), ikkinchisi int f(int a, int &b) kabi e’lon qilinsa, u holda kompilyator bu funksiyalardan qaysi biri qaysi birini chaqirayotganini bilmaydi, chunki qiymat bo'yicha parametr oladigan funksiyani chaqirish bilan murojaat bo'yicha parametr oladigan funksiyani chaqirish orasida sintaktik farqlar yo'q.
Jimlik bo'yicha argumentlardan foydalanishda bir qiymatli bo'lmaslik misoli:

#include


int f(int a){return a;}
int f(int a, int b = 1) {return a * b;}
int main(){
cout << f(10, 2); // f(int, int) chaqiriladi
/* cout << f(10); Bir qiymatli bo'lmaslik – nima chaqiriladi: f(int, int) yoki f(int) ? */
return 0;
}

Quyida ortiqcha yuklangan funksiyalarni tavsiflash qoidalari keltirilgan.



  • Ortiqcha yuklangan funksiyalar bitta ko'rinish sohasida joylashishi lozim, aks holda ichma-ich joylashgan bloklarda o'zgaruvchilar bir xil nomlarga o'xshash yashirinish ro'y beradi.

  • Ortiqcha yuklangan funksiyalar jimlik bo'yicha parametrlarga ega bo'lishi mumkin, bunda turli funksiyalardan bitta parametr qiymatlari ustma-ust tushish lozim.

  • Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или использованием ссылки (например, int и const int или int и int&).




Download 333,2 Kb.

Do'stlaringiz bilan baham:
1   ...   40   41   42   43   44   45   46   47   ...   90




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