8.2. C++ tilida o‘rnatilgan qism dasturlar
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
239
C++ tilida o‘rnatilgan funksiyalar shablonli funksiyalar deb nomlanadi.
Shablonli funksiyalar quyidagi ko‘rinishga ega bo‘ladi:
template
Sinf bo‘lgan parametrlarga ega bo‘lishi mumkin bo‘lgan aniq funksiyalar
Shablonli funksiya sinf bo‘lgan hech bo‘lmasa bitta parametrga ega bo‘lishi
lozim. Har qanday bunday parametr quyidagi ko‘rinishda bo‘ladi:
class identifikator
Masalan, quyidagi shablonli funksiyani ko‘rib chiqamiz
template
Type max (Type first, Type second)
{ return first>second ? first:second;
}
Bu yerda Type – parametr bo‘lib, funksiya ishlovchi ma’lumotlar tipini
ko‘rsatadi. Bunday shablonli funksiya nusxalarini ma’lumotlarning har qanday tipi
bilan ishlash uchun yaratish mumikn. Masalan, int tipi uchun protsedura nusxasi
quyidagicha bo‘lishi mumkin:
int max (int first, int second) {
return first> second ? first: second;
Ushbu amallarni makroaniqlash (makros) ko‘rinishida tavsiflash mumkin,
ammo bu holda u noto‘g‘ri ishlashi mumkin. Makros quyidagi ko‘rinishda bo‘lsin
deylik:
define max (a,b) ((a) > (b) ? (a) : (b)
Ushbu makros o‘rnatiluvchan hisoblanadi, ya’ni u har qanday sonli tipdagi
ma’lumotlar bilan ishlaydi. Ammo, u har doim ham to‘g‘ri ishlamaydi, asosan,
nosozliklarga ega parametrlar orqali chaqirilgan hollarda, masalan:
max (x++, y)
Bu quyidagi natijaga olib keladi:
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
240
((x++)> (y) ? (x++) : (y))
x o‘zgaruvchisi qiymatlari u o‘zgaruvchisi qiymatidan katta bo‘lgan har safar, x
o‘zgaruvchisi qiymati ikki marta oshadi.
C++ tilida shablonli funksiyalari nusxalari o‘z holicha yaratiladi. Masalan,
yuqorida aniqlangan shablonli funksiyalar nusxalarini quyidagi kod fragmenti
yordamida ikki marta yaratish mumkin: int tipli va char tipili parametrlar uchun,
albatta:
int a, b, c;
char d, e, f;
…
c=max (a, b);
f=max (d, e);
Quyida C++ tilidagi o‘rnatilgan qism dastur versiyasi keltirilgan bo‘lib, u 8.8.1
bo‘limda ko‘rib chiqilgan. U oldingi versiyasidan salgina farq qiladi, chunki C++
tilidagi massivlar indeksi butun bo‘lishi lozim.
template
void generic_sort (Type list[], int len {
int top, bottom;
Type temp;
for (top = 0; top for (bottom=top+1; bottomif (list[top]>list[bottom]) {
temp = list[top];
list[top]=list[bottom];
list[bottom]=temp;
} //* for siklining oxiri (bottom = …
} //** o‘rnatilgan sortirovka qilish funksiyasining oxiri
Quyida ushbu shablonli funksiyasining nusxasini yaratishga misol keltirilgan:
float flt_lit[100];
…
generic_sort(flt_list, 100);
Ada tilidagi o‘rnatilgan qism dasturlar va C++ tilidagi shablonli funksiyalar qism
dasturlarga turlicha qaraydi, bunda rasmiy parametrlar chaqirilganda faktli
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
241
parametrlar tiplari bilan dinamik holda bog‘lanadi. Bu holda, kodning birgina nusxasi
kerak bo‘ladi.
Smalltalk, Java, Ada 95 va C++ tillarida chaqiruvlar metodning kerakli versiyasi
bilan dinamik bog‘lanadi, bunda u faktli parametrlar tiplariga muvofiq bo‘ladi. Ushbu
mavzu 11 bobda o‘rganib chiqilgan.
Do'stlaringiz bilan baham: |