Динамик полиморфизмни қўллаш
Динамик полиморфизм воситасида программа бажарилишини бошқаришнинг мосланувчан бошқаришни амалга ошириш мумкин. Қуйида, бутун сонларнинг боғланган рўйхати кўринишида амалга оширилган стек ва навбат тузилмалари устида ишлаш қаралган. Маълумки, навбат – «биринчи келган – биринчи кетади», стек - «охирда келган – биринчи кетади» тамойили бўйича берилганларни сақлаш ва қайта ишлашни амалга оширувчи тузлмалар ҳисоланади. Программада боғланган рўйхатни яратиш, унга қиймат жойлаштириш ва ўчиришни амалга оширувчи Ruyxat таянч синфи ва унинг ворислари сифатида навбат ҳосил қилувчи мос равишда Navbat ва Stek синфлари яратилади. Гарчи бу тузилмалар билан ишлаш турлича амалга оширилса ҳам, уларни ишлатишда ягона интерфейсдан фойдаланилади.
#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;
Yangi->Qiymat_n(n);
Yangi->Keyingi=NULL;
// Элементни навбатнинг охирига жойлаш
if(Oxiri) Oxiri->Keyingi=Yangi;
Oxiri=Yangi;
if(!Boshi) Boshi=Yangi;
}
bool Navbat::Olish(int& n)
{
Ruyxat * Element;
if(!Boshi){n=0; return false;}
Do'stlaringiz bilan baham: |