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



Download 333,2 Kb.
bet75/90
Sana10.07.2022
Hajmi333,2 Kb.
#770437
1   ...   71   72   73   74   75   76   77   78   ...   90
Bog'liq
C majmua

template
sinf _nomi tipini_qaytarish ::
funksiya_nomi (funksiya_parametrlari_ro’yxati)

Funksiya sarlavhasida qolip parametrlarini tavsifi sinf qolipiga mos kwlishi lozim, bunda parametrlar nomlari ustma-ust tushmasligi mumkin. Qolip usullari tavsifi sintaksisini misolda qarab chiqish osonroq:


template void List::print()
{ / * funksiya tanasi */ }
Bu yerda - qolip parametri tavsifi, void – funksiya qaytaradigan qiymat tipi, List – sinf nomi, - qolip parametri, print – parametrlarsiz funksiyaning nomi.
Bir nechta parametr holida ularni parametrlar va qolip parametrlari tavsifida joylashish tartibi bir xil bo’lishi lozim, masalan:
template struct A{
void f1();
};
template void A : : f l ( ) { ... }

Quyida qoliplarni tavsiflash qoidalari sanab o’tilgan:



  • Lokal sinflar o’z elementrlari sifatida qoliplarni o’z ichiga olishi mumkin emas.

  • Usullar qoliplari virtual bo’lishi mumkin.

  • Sinflar qoliplari statik elementlari, do’st funksiya va sinflarni o’z ichiga olishi mumkin.

  • Qoliplar qoliplar hamda oddiy sinflar hosilasi bo’lishi mumkin, hamda qoliplar va oddiy sinflar uchun bazaviy bo’lishi mumkin.

  • Qolip ichida friend – qoliplar aniqlash mumkin emas.

Qolipga misol sifatida ikki bog’lamli ro’yxatning parametrlashgan sinfini to’liq tavsifini qaraymiz:


template class List{
class Node{
public:
Data d;
Node *next, *prev;
Node(Data dat = 0){d = dat; next = 0; prev = 0;}
};
Node *pbeg, *pend;
public:
List(){pbeg = 0; pend = 0;}
~List();
void add(Data d);
Node * find(Data i);
Node * insert(Data key, Data d);
bool remove(Data key);
void print();
void print_back();
};
// -------------------------
template
List ~List(){
if (pbeg != 0){
Node *pv = pbeg:
while (pv){
pv = pv->next; delete pbeg;
pbeg = pv;}
}
}
// -------------------------
template
void List ::print(){
Node *pv = pbeg;
cout << endl << "list: ";
while (pv){
cout << pv->d << ' ':
pv = pv->next;}
cout << endl;
}
// -------------------------
template
void List ::print_back(){
Node *pv = pend;
cout << endl << " list back: ";
while (pv){
cout << pv->d << ' ';
pv = pv->prev;}
cout << endl;
}
// -------------------------
template
void List ::add(Data d){
Node *pv = new Node(d);
if (pbeg == 0)pbeg = pend = pv;
else{
pv->prev = pend;
pend->next = pv;
pend = pv;}
}
// -------------------------
template
Node * List ::find(Data d){
Node *pv = pbeg;
while (pv){
if(pv->d == d)break;
pv = pv->next;
}
return pv;
}
// -------------------------
template
Node * List ::insert(Data key, Data d)(
if(Node *pkey = find(key)){
Node *pv = new Node(d);
pv->next = pkey->next;
pv->prev = рkеу;
pkey->next = pv:
i f ( рkеу != pend)(pv->next)->prev = pv;
else pend = pv;
return pv;}
return 0;
}
// -------------------------
template
bool List ::remove(Data key){
if(Node *pkey = find(key)){
if (pkey == pbeg){
pbeg = pbeg->next; pbeg->prev = 0;}
else if (pkey == pend){
pend = pend->prev; pend->next;= 0:}
else {
(pkey->prev)->next = pkey->next;
(pkey->next)->prev = pkey->prev;}
delete pkey; return true;}
return false;
}

Agar List qolipni ichiga joylashmagan foydalanuvchi aniqlagan tipdagi ma’lumotlarni saqlash uchun foydalanish talab etilsa, bu tip tavsifiga oqimga chiqarish amalini qayta yuklashni va tenglikka taqqoslashni qo’shish zarur, agar uning maydonlari uchun xotirani dinamik ajratishda foydalanilsa, u holda qiymat berish amali ham qo’shiladi.


Qolip sintaksisini aniqlashda aytildiki, unga tip va qoliplardan tashqari o’zgaruvchilar ham uzatilishi mumkin. Ular butuni yoki sanab o’tish tipida, hamda obyekt funksiyaga ko’rsatgichlar bo’lishi mumkin. Qolip tanasida ular constant sifatida foydalanish mumkin bo’lgan ixtiyoriy joyda foydalanilishi mumkin. Misol sifatida ma’lum uzunlik va tipdagi xotira blokini o’z ichiga olgan sinf qolipini yaratamiz:
template
class Block{
public:
Block(){p = new Type [kol];}
~Block(){delete [] p;}
operator Type * ( );
protected:
Type * p;
};
template
Block :: operator Type *(){
return p;
}

Sinf qoliplarini yaratish va sozlashdan so’ng ularni sarlavha fayllarga joylashtirish qulay hisoblanadi.





Download 333,2 Kb.

Do'stlaringiz bilan baham:
1   ...   71   72   73   74   75   76   77   78   ...   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