Mavzu: polimorfizm va uning turlari


Dinamik polimorfizmni qo‘llash


Download 44.24 Kb.
bet6/7
Sana03.06.2024
Hajmi44.24 Kb.
#1855802
1   2   3   4   5   6   7
Bog'liq
13 – ma’ruza mavzu polimorfizm va uning turlari. Virtual funksi-fayllar.org

Dinamik polimorfizmni qo‘llash 
Dinamik polimorfizm vositasida dastur bajarilishini boshqarishning
moslanuvchan boshqarishni amalga oshirish mumkin. Quyida, butun sonlarning
bog‘langan ro‘yxati ko‘rinishida amalga oshirilgan stek va navbat tuzilmalari ustida
ishlash qaralgan. Ma’lumki, navbat - ”birinchi kelgan - birinchi ketadi”, stek -
oxirda kelgan - birinchi ketadi” tamoyili bo‘yicha berilganlarni saqlash va qayta
ishlashni amalga oshiruvchi tuzilmalar hisoblanadi. Dasturda bog‘langan ro‘yxatni
yaratish, unga qiymat joylashtirish va o‘chirishni amalga oshiruvchi Ruyxat tayanch
sinfi va uning vorislari sifatida navbat hosil qiluvchi mos ravishda Navbat va Stek
sinflari yaratiladi. Garchi bu tuzilmalar bilan ishlash turlicha amalga oshirilsa ham,
ularni ishlatishda yagona interfeysdan foydalaniladi.
#include
#include
#include
class Ruyxat
{
public:
Ruyxat(){Boshi=Oxiri=Keyingi=0;}
virtual void Joylash(int n)=0;
virtual bool Olish(int& n)=0;
void Qiymat_n(int n){Son=n;}
int n_Qiymat(){return Son;}
Ruyxat * Boshi;
Ruyxat * Oxiri;



Ruyxat * Keyingi;


private:
int Son;
};
class Navbat: public Ruyxat
{
public:
void Joylash(int n);
bool Olish(int& n);
};
void Navbat::Joylash(int n)
{
Ruyxat * Yangi;
Yangi=new Navbat;
// Navbatning yangi elementini yaratish
Yangi->Qiymat_n(n);
Yangi->Keyingi=NULL;
if(Oxiri) Oxiri->Keyingi=Yangi; // Elementni navbatning oxiriga joylash
Oxiri=Yangi;
if(!Boshi) Boshi=Yangi;
}
bool Navbat::Olish(int& n)
{
Ruyxat * Element;



if(!Boshi){n=0; return false;}


n=Boshi->n_Qiymat();
Element=Boshi;
Boshi=Boshi->Keyingi;
delete Element;
return true;
}
class Stek: public Ruyxat
{
public:
void Joylash(int n);
bool Olish(int& n);
};
void Stek::Joylash(int n)
{
Ruyxat * Yangi;
Yangi=new Stek;
// Stekning yangi elementini yaratish
Yangi->Qiymat_n(n);
Yangi->Keyingi=NULL;
if(Boshi) Yangi->Keyingi=Boshi;
// Elementni stek boshiga joylash
Boshi=Yangi;
if(!Oxiri) Oxiri=Yangi;
}



bool Stek::Olish(int& n)


{
Ruyxat * Element;
if(!Boshi){n=0; return false;}
n=Boshi->n_Qiymat();
Element=Boshi;
Boshi=Boshi->Keyingi;
delete Element;
return true;
}
int main()
{
Ruyxat * ruyxat;
Navbat navbat;
Stek stek;
int son;
char stek_navbat;
cout<<"Sonlarni navbat va stekka joylash:\n";
do
{
cout<<"Sonni kiriting(0-tamom): ";
cin>>son;
if(son)



{
do


{
cout<<"Joylshtirish? Stekka(S) yoki Navbatga(N):";
cin>>stek_navbat;
}
while (stek_navbat!='S' && stek_navbat!='s'
&& stek_navbat!='N' && stek_navbat!='n');
switch(stek_navbat)
{
case 'S': case 's': ruyxat=&stek; break;
case 'N': case 'n': ruyxat=&navbat;
}
ruyxat->Joylash(son);
}
}
while (son);
for(;;)
{
do
{
cout<<"O'qish? Stekdan(S) yoki Navbatdan(N):\n";
cout<<"Dasturdan chiqish (Q):\n";



cin>>stek_navbat;


}
while(stek_navbat!='S' && stek_navbat!='s' &&
stek_navbat!='N' && stek_navbat!='n' &&
stek_navbat!='Q' && stek_navbat!='q');
switch(stek_navbat)
{
case 'S':
case 's': ruyxat=&stek; break;
case 'N': case 'n': ruyxat=&navbat; break;
case 'Q':case 'q': return 0;
}
if(ruyxat->Olish(son)) cout}
Dastur kirish oqimidan butun sonlarni o‘qiydi va foydalanuvchi tanlagan
ro‘yxatga - navbat yoki stekka joylashtiradi. Sonlarni kiritish jarayoni navbatdagi
son tariqasida 0 soni kiritilganda to‘xtaydi. Keyinchalik, foydalanuvchi ko‘rsatgan
ro‘yxatdan son qiymatlari o‘qiladi va ekranga chop qilinadi. Dinamik polimorfizm
ruyxat ko‘rsatkichi navbat yoki stek obyektlariga ko‘rsatishiga mos ravishda virtual
Olish() va Joylash() funksiyalarini chaqirishida namoyon bo‘ladi.

Download 44.24 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling