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



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

Funksiyalar shablonlari

Ko'pgina algoritmlar ular bilan ishlaydigan ma'lumotlar tiplariga bog'liq emas (klassik misol - saralash). Algoritmni shunday parametrlash istagi mavjudki, uni ma'lumotlar turli tiplari uchun foydalanish mumkin bo'lsin. Birinchi xayolga keladigani – tip haqidagi ma'lumotni parametr sifatida uzatish (masalan, bir parametr bilan funksiyaga ma'lumotlarga ko'rsatgich, so'ngra – ma'lumotlar elementining baytlardagi uzunligi uzatiladi). Qo'shimcha parametrdan foydalanish qo'shimcha kodni hosil bo'lishini bildiradi, bu esa rekursiv chaqirishlarda va ichki sikllardagi chaqirishlarda dastur samaradorligini pasaytiradi, bundan tashqari, tiplarni nazorat etish imkoniyati yo'q. Boshqa yechim bo'lib, turli tipdagi ma'lumotlar bilan ishlash uchun bir nechta yuklanishli ortgan funksiyalarni yozish hisoblanadi, lekin bunday holda dasturda mantiq bo'yicha bir xil bir nechta funksiya bo'ladi va har bir uchun yangisini kiritishga to'g'ri keladi.


C++ da parametrlashning kuchli vositasi – shablonlar bor. Funksiyalar shablonlari va sinflar shablonlari mavjud. Funksiya shabloni yordamida turli tiplarga qo'llaniladigan algoritmni aniqlash mumkin, ma'lumotlarning konkret tipi esa funksiyaga kompilyatsiya bosqichida parametr ko'rinishida uzatiladi. Kompilyator avtomatik ravishda uzatilgan tipga mos to'g'ri kodni hosil qiladi. Shunday qilib, o'zini avtomatik yuklaydigan funksiya yaratiladi va bunda parametrlashga bog'liq qo'shimcha sarflarni o'z ichiga olmaydi.
Oddiy funksiya-shablonning formati:

template sarlavha {


/* funksiya jismi */
}

Type so'zi o'rniga ixtiyoriy nomdan foydalanish mumkin.


Umumiy holda funksiya shabloni har biri nafaqat tip balki o'zgaruvchidan, masalan:

template void f() { … }


iborat bir nechta parametrlarni o'z ichiga olishi mumkin.


Masalan, tanlash usuli bilan ixtiyoriy tipdagi n elementdan iborat massivni saralovchi funksiya shablon ko'rinishda quyidagicha shaklga ega:

template


void sort_vybor(Type *b, int n){
Type a; // elemenlarni almashish uchun buffer o'zgaruvchi
for (int I = 0; i int imin = i;
for (int j = i + 1; j if (b[j] < b[min]) imin = j;
a = b[i]; b[i] = b[imin]; b[imin] = a;
}
}

Bu funksiya-shablonni chaqiruvchi dasturning bosh funksiyasi quyidagi ko'rinishga ega bo'lishi mumkin:


#include


template void sort_vybor(Type *b, int n);
int main(){
const int n = 20;
int i, b[n];
for (i = 0; i> b[i];
sort_vybor(b, n); // Butun sonli massivni saralash
for (i = 0; i cout << endl;
double a[] = {0.22, 117, -0.08, 0.21, 42.5};
sort_vybor(a, 5); // haqiqiy sonlar massivini saralash
for (i = 0; i<5; i++) cout << a[i] << ' ';
return 0;
}

Ma'lumotlar konkret tipidan foydalanuvchi funksiyani birinchi chaqirish mos funksiya talqini uchun kompilyator kodini yaratishga olib keladi. Bu jarayon shablonni instansiyalash (instantiation) deb ataladi. Instansiyalash konkret tip yo kompilyator bilan avtomatik ravishda funksiyani chaqirishdan parametrlari tiplariga asoslanib aniqlanadi yoki oshkora beriladi. O'sha ma'lumotlar tipdagi qayta chaqirishda kod takroran hosil bo'lmaydi. Shablon parametric o'rniga konstant ifoda ko'rsatilishi lozim.


Chaqirishda shablon argumentlarini oshkora berish misoli:

template void f(Y, Z);


void g(){
f ( "Vasia", 3.0);
f ( "Vasia", 3.0); // Z double kabi aniqlanadi
f( "Vasia", 3.0); // Y char* kabi aniqlanadi, Z esa double kabi
// f( "Vasia", 3.0); xato: X ni toppish mumkin emas
}

Funksiya shablonni foydalanuvchi aniqlagan ma'lumotlar tipiga qo'llash usuli (Struktura yoki sinfga) funksiyada foydalaniladigan bu ma'lumorlar tipi uchun amallarni qayta tiklash talab etiladi.


Oddiy funksiyalar kabi funksiyalar shablonlar yordamida ham oddiy funksiyalar yordamida ham ortiqcha yuklanishi mumkin.
Ayrim parametrlar va tiplarni funksiya shablonini maxsuslashtirish yordamida maxsus qayta ishlashni ko'zda tutish mumkin. Faraz qilaylik, biz butun sonlar uchun saralash umumiy algoritmini samaraliroq amalga oshirishni xoxlaymiz. Bu holda butun sonlar bilan ishlash uchun funksiya shablonining variantini “qo'lda” berish mumkin.

void sort_vibor( int *b, int n){


… // funksiyaning maxsuslashgan variant jismi
}

Funksiya shabloni signaturasi nafaqat uning tipi va parametrlar tipini, balki shablonning mavjud argumentini ishga tushiradi. Odatdagi funksiya hech qachon nisbatan maxsuslashtirishi bilan hisoblashmaydi, shunga qaramay o'sha tip va qaytaruvchi qiymat tipiga ega bo'lishi mumkin.





Download 333,2 Kb.

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