Toshkent axborot texnalogiyalari universiteti samarqand filliali




Download 12.88 Kb.
Sana04.01.2023
Hajmi12.88 Kb.
#37489
Bog'liq
D5-mustaqil ish dasturlash
очиқ-дарси, 1-mustqail ta`lim (1)

MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNALOGIYALARI UNIVERSITETI
SAMARQAND FILLIALI
‘’KOMPIYUTER INJINERING’’ FAKULTETI
SIRTQI KIS-21-02 GURUH TALABASI
XAYRULLAYEV JAVOXIRNING
DASTURLASH FANIDAN TAYYORLAGAN
5-MUSTAQIL ISHI

Shablonlar yordamida umumiy funksiyalar va umumiy klaslar yaratish imkoniyati mavjud. Umumiy funksiya va umumiy claslar har hil ma'lumot toifalardan ularni overload qilmasdan (ko'p kod yozmasdan) foydalanish imkoniyatini beradi. Yani bunda biz har bir toifa uchun kod yozmasdan foydalanishimiz mumkin.


Shablonlar ikki xil bo'ladi:
1. Funksiya shabloni (function template)
2. Sinf shablonlari (class template)
Funksiya shabloni yaratish:
Funksiya shabloni template kalit so'zdan foydalangan holda amalga oshiriladi.Quyida funksiya shabloni yaratish formulasini keltiramiz:
template << class toifa>> qaytarish tipi funk -nomi (orglar)
{
funksiya tanasi
}
Bu yerda TOIFA funksiya joriy holda ishlatiladigan ma'lumot tipi. Ushbu toifani kompilyator automatik ravishda funksiyaga kelayotgan ma'lumot tipi bilan almashtiriladi.
Bu yerda class va template lar funlsiya shablonini yaratish uchun ishpatiladigan kalit so'zlardir. Lekin ba'zi hollarda class kalit so'zi o'rniga typename kalit so'zini ishlatishimiz mumkin. Quyidagi misol hohlagan tipda berilgan ikkita o'zgaruvchi o'rniga apmashtirib berish uchun xizmat qiladi va bunda har bir toifa uchun alohida funksiya yozishimizga zarirqt qolmaydi.
Funksiya Shabloniga Misol:
#include
using namespace std.
// Funksiya Shabloni e'lon qilinishi
template void sw apargs (X &a , X & b)
{
X temp;
temp = a;
a = b;
b=temp;
}
int main()
{
int i=10, 20;
double x=10.1, y=23.3;
char ax, b='z;
cout<"Original i, }: " <cout< "Original x, y: " <cout&< "Original a, b:swapargs,DU swap funksiyasi butun toifa uchun (int)
swapargs(x, y); // swap funksiyasi haqiqiy toifa uchun (float)
swapargs(a, b); // swap funksiyasi simvol toifa uchun (char)
cout &<"Swapped i, J: " <cout < "Swapped x, y: " <cout & "Swapped a, b: " ae"sbs< in;
}
return 0;
Dastur izohi:
Umumiy funksiyaning boshqacha ko'rinishi
Quyidagi mísolda swapargs() funksiyasi boshqacharoq ko'rinishda e'lon
qilingan. Ya'ni shablon birinchí satrda funksiya esa alohida satrda joylashgan.
template
void swapargs(X &a, X &b)
X temip:
temp a,
a = b;
b temp
}
Lekin bu korinishda birinchi va ikkinchi satr o'rniga bironta kod yozilsa
xatolik beradi
template int c // ERROR
void swapargs(X &a, X &b)
X temp;
temp=a
a = b
b=temp;
Funksiya shablonini override (qayta yozish) qilish.
template void swapargs(X &a, X &b)

X temp;
temp = a;


a = b;
b temp
cout << "sw apargs funksiya shabloni chaqirildi.In";
IV. LJZ
I Bunda swapargs() funksiyasi faqatgina int tipi uchun ishlaydi.
void swapargs(int &a, int &b)
int temp;
temp = a;
a =b;
b temp
cout < " int tipi uchun maxsus swapargs funksiyasi. n ";
}

int main()


{
int i=10, j=20
double x=10.1, y=23.3;
char a=x, b='z;
cout < "Original i, : " <cout < "Original x, y: " <cout < "Original a, b: " swapargs(x y);/calls generic swapargs)
swapargs(a, b); // calls generic swapargs)
cout< "Swapped i, j: " <cout < "Swapped x, y: " <cout"Swapped a, b: " << a<<" <return 0;
}
Dastur natijasi:
Original i, j 10 20
Original x, y: 101 23.3
Original a, b: x z
int tipi uchun maxsus swapargs funksiyasi.
Swapargs funksiya shabloni chaqirldi.
Swapargs funksiya shabloni chaqirildi.
Swapped i, j: 20 10
Swapped x, y: 23.3 10.1
Swapped a, b: zx
Funksiya shablonini Overide qilish yangi usuli
template<> void swapargs< int>(int &a, int &b)
{
int temp;
temp = a;
a = b;
b temp;
cout <<" int tipi uchun maxsus swapar gs funksiyasi. In";
}
Funksiya shablonini overload qilish.
/ Oddiy funksiyalardek, funksiya shablonini ham overload qilish mumkin.
#incdude
using namespace sd;
W fO funks iya shablonintng birinchi turi.
template void f(X a)
{
cout < "In side f(X a)in";
}
u f() funks iya shablonining kkinchi turi. U7
template void f(X a, Y b)
{
cout&< "Inside f(X a, Y b)\n";
}
int main()
{
f(10)//calls f(X)
f(10, 20); calls f(X, Y)
return 0;
}
Funksiya shablonining kamchiligi
•Umumiy funksiyalar funksiya over loadining o'rnini bosishi mumkin.
•Lekin bu yerda bitta kamchilik mavjud.
•Biz oddiy funksiyani overload qilganimizda, har xil ma'lumotlar tipi uchun
funksiya tanasini har xil qilib yozishimiz mumkin.
•Lekin umumiy funksiyada har xil tip qabul qila olgani bilan funksiya tanasi
har doim bir xil bo"ladi, chunki bitta funksiyaga murojaat bo'ladi.
•Faqatgina ma'lumotlar tipi har xil bo'la oladi.

•Umumiy sinflar (sinf shabloni)


Sinf shablonini e'lon qilishning umumiy formasi:
template class sinf_nomi
{
.....
}
Yoki quyidagi korinishda e'lon qilish mumkin
template class TOIFA>
class sinf_nomi
{
...
}
Sinf shablonini ishlatish
sinf_nomi obyekt
Sinf shabloni uchun oddiy misol.
#include
using namespace std;
template
class mypair {
T a, b;
public:
mypair (T first, T second)
a=first; b=second;}

T getmax ():


template
Tmypair:: getmax ()
{
T retval;
retval = a>b? a: b;

return retval;


}
int main (){
mypair myobject (100, 75);
cout < m yobject.getmax(0;
return 0;
}
Sinf shablonida ikki xil toifadan foydalanish
#indude
using namespace stc
template class myclass
Typel i;
Type2 j;
public:

myclass(Typel a, Type2 b) { i= aJ= b; }


void show0 { cout << i<<''<int main0

myclass ob1(10, 0.23


myclass ob2(X, "Templates add power. ");
ob1.showO; / show int, double
ob2.show0; //show char, char
return 0;

Dastur natijasi:


100.23
X Templates add power
Maxsuslashtirilgan sinf shabloni
template> konstruktori maxsuslashtirilgan sinf shabloni uchun ishlatiladi
template Tx;
public:
myclass(T a) {
cout << "Inside generic myclassn";
X= a

T getx) { return x;}


l int toifasi uchun maxsuslashtirilgan sinf shabloni.
template<> class myclass {
int X;
public:
myclass int(a)?
cout << "Inside myclass< int> specialization\n";
x= a* a;
int getx) { return
Shablonning asosiy xususiyatlari
•reusable kod yozish imkonini ber adi.
•Shablonlar yordamida framework lar yar at ish mumkin
•Dastur kodi egiluvchan lik xususiyatiga ega bo'ladi.
•Turli xil tipdagí ma'lumotlar ustida ishlash uchun kod yozishda vaqıni tejash
•C++ dagi STL lar (Standard Shablon Kutubxonalar), nomidan ko'rinib turibdiki, shablonlar yordamida yaratilgan.

Download 12.88 Kb.




Download 12.88 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Toshkent axborot texnalogiyalari universiteti samarqand filliali

Download 12.88 Kb.