Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi



Download 1,57 Mb.
bet46/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   42   43   44   45   46   47   48   49   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

Shablon sinflar
Shablonlar ma'lum tiplardan foydalanadigan konstruksiyalarni (funksiyalarni, sinflarni) aniqlash imkonini beradi, lekin kodni yozish vaqtida bu turlarning aniq nima bo'lishi ma'lum emas. Boshqacha qilib aytganda, shablonlar ma'lum bir turga bog'liq bo'lmagan umumiy konstruksiyalarni aniqlash imkonini beradi.
Sinf shablonlari (class template) sinfda ishlatiladigan obyektlarning turini o'rnatishga imkon beradi. Ammo sinf shablonini aniqlashga o'tishdan oldin, shablonlarni hal qilish imkonini beradigan duch kelishimiz mumkin bo'lgan muammoni ko'rib chiqaylik.
Aytaylik, biz bank hisobi sinfini tavsiflashimiz kerak. Bank hisobvarag'ida raqam bo'lishi kerak, lekin sinfni yozish paytida hisob raqamining qaysi turini ko'rsatishi noma'lum bo'lishi mumkin - bu 1233545 raqamli raqam bo'lishi mumkin yoki bu shunchaki ko'rinishdagi belgilar to'plami bo'lishi mumkin. masalan, "1234878rtyio". Bir qarashda biz ikkita sinfni aniqlashimiz mumkin:

#include


#include

class IntAccount {


private:
int id;
public:
IntAccount(int id) : id(id)
{ }
int getId() {
return id;
}
};

class StrAccount {


private:
string id;
public:
StrAccount(string id) : id(id)
{ }
string getId() {
return id;
}
};

int main()


{
StrAccount acc1("ca-pub1343767");
IntAccount acc2(1234566);

cout << "acc1: " << acc1.getId() << endl;


cout << "acc2: " << acc2.getId() << endl;

return 0;


}

Garchi bu misol ishlayotgan bo'lsa-da, aslida biz ikkita bir xil sinfni olamiz, ular faqat id turida farqlanadi. Sinf shablonlari sinf uchun umumiy turni belgilash orqali kod takrorlanishini kamaytirishga yordam beradi. Shablonlarni qo'llash uchun kodni o'zgartiramiz:


template


class Account {
private:
T id;
public:
Account(T id) : id(id)
{ }
T getId() {
return id;
}
};

Shablonlarni qo'llash uchun sinfdan oldin template kalit so'zi, keyin burchakli qavslar ko'rsatiladi. Burchakli qavs ichida tip nomidan keyin shablon parametri keladi. Siz bir nechta shablon parametrlarini belgilashingiz mumkin, yuqoridagi misolda faqat bitta parametr ishlatiladi.


Shablon parametri ixtiyoriy identifikator bo‘lib, u odatda bosh harf bilan yoziladi, masalan, T. Lekin bu ixtiyoriy. Ya'ni, bu holda, T parametri kompilyatsiya vaqtida ma'lum bo'lgan ba'zi bir turni ifodalaydi. Bu int, double, string yoki boshqa turdagi bo'lishi mumkin. Va endi hisob identifikatori T parametri orqali o'tadigan turni ifodalaydi.
Keling, ushbu sinfdan foydalanamiz:

#include


#include
template
class Account {
private:
T id;
public:
Account(T id) : id(id)
{ }
T getId() {
return id;
}
};
int main()
{
Account acc1("ca-pub1343767");
Account acc2(1234566);
cout << "acc1: " << acc1.getId() << endl;
cout << "acc2: " << acc2.getId() << endl;
return 0;
}

Sinf shablonini ishlatganda, sinf nomidan keyin burchakli qavs ichida T parametri o'rniga ishlatiladigan ma'lum bir turni ko'rsatish kerak. Shunday qilib, birinchi holatda, T o'rniga, satr turi ishlatiladi, shuning uchun siz satrni sinf konstruktoriga o'tkazishi mumkin:


Account acc1("ca-pub1343767");


Ikkinchi holda, int turi ishlatiladi, shuning uchun konstruktorga raqam uzatiladi:


Account acc2(1234566);


Bundan tashqari, bir vaqtning o'zida bir nechta parametrlarni qo'llashingiz mumkin. Masalan, siz bank o'tkazmalari sinfini belgilashingiz kerak:


#include


#include
template
class Transaction
{
public:
Transaction(T fromAcc, T toAcc, V code, int sum):
fromAccount(fromAcc), toAccount(toAcc), code(code), sum(sum)
{ }
void getInfo()
{
cout << "From: " << fromAccount << "\nTo: " << toAccount
<< "\nSum: " << sum << "\nCode: " << code << endl;
}
private:
T fromAccount; // с какого счета
T toAccount; // на какой счет
V code; // код операции
int sum; // сумма перевода
};
int main()
{
Transaction t1("id1234", "id5678", 2804, 5000);
t1.getInfo();
return 0;
}

Transaction klassi ikkita parametrdan, T va V dan foydalanadi. T parametri uzatish jarayonida ishtirok etuvchi hisoblar turini belgilaydi. Bu yerda siz hisob raqamlari sifatida raqamli va qator qiymatlari va boshqa turdagi qiymatlardan foydalanishingiz mumkin. Va V parametri opcode turini belgilaydi - yana, u har qanday turdagi bo'lishi mumkin.


Bunday holda shablondan foydalanganda siz ikkita turni ko'rsatishingiz kerak:

Transaction t1("id1234", "id5678", 2804, 5000);


Turlar pozitsiya bo'yicha parametrlarga o'tkaziladi. Shunday qilib, T parametri o'rniga string tipi, V parametri o'rniga int turi qo'llaniladi.




Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   42   43   44   45   46   47   48   49   ...   81




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