Do‘stona munosabat qoidalari Odatda sinflarni loyihalashda savol kelib chiqadi, sinflarni o‘zaro
munosabatini qanday qurish kerak bo‘ladi.Ikkita oddiy sinflarga misol ko‘ramiz –
Square va Rectangle, ular kvadrat va to‘g‘rito‘rtburchaklardir. Shunisi tushunarliki bu
6566 sinflar vorislik bog‘lanishida bo‘ladi, lekin ikkita sinfdan qaysi biri ajdod sinf bo‘ladi.
Yana ikkita sinfga misol – Car va Person, ya’ni mashina va inson. Bu sinflar bilan
Person_of_Car ya’ni mashina egasi sinfi qanday aloqada bo‘lishi mumkin? Bu ikki
sinf bilan vorislik bog‘lanishida bo‘lishi mumkinmi? Sinflarni loyihalash bilan
bog‘liq bu savollarga javob topish uchun shuni nazarda tutish kerakki, “mijoz
yetkazuvchi” bog‘lanishi “ega” (“has”) bog‘lanishini, vorislik bog‘lanishi esa “bir
xil” (“is a”) bog‘lanishi tushunchalarini ifodalaydi. Square va Rectangle sinflari
misoli tushunarli, har bir obyekt kvadrat to‘g‘rito‘rtburchakdir, shuning uchun bu
sinflar o‘rtasida vorislik bog‘lanishi ifodalanadi, va Rectangle sinfi ota-onalar sinfini
ifodalaydi. Square sinfi uning o‘g‘lidir. Mashina egasi mashinaga ega va insondir.
Shuning uchun Person_of_Car sinfi Car sinfning mijozi bo‘lib hisoblanadi va Person
sinfning vorisidir.
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.
Misol: Hayvonlar va parrandalar sinfini(meros) o’zaro bog’lash
#include #include #include using namespace std;
class hayvonlar
{
protected:
string nomi;
int yili;
public:
hayvon(string n, int y)
{
this->nomi=n;
this->yili=y;
}
void print()
{
cout<<"Nomi: "<cout<<"Necha yil yashashi: "<}
};
class parranda:hayvonlar
{
protected:
string turi,yashash_joyi;
public:
parrandalar(string t, string y, int yy)
{
this->turi=t;
this->yashash_joyi=y;
this->yili=yy;
}
static void saralash(parranda* massiv, int n)
{
for (int i = 0; i {
for (int j = i + 1; j {
if (massiv[i].yili >massiv[j].yili)
swap(massiv[i], massiv[j]);
}
}
}
void print()
{
cout<<"Turi: "<cout<<"Manzil: "<cout<<"Yashash yili: "<}
};
int main()
{
int n,y; cout<<"Nechta parranda haqida ma'lumot kiritmochisiz: "; cin>>n;
parranda par[n]; string t,m;
array ar;
for(int i=0; i{
cout<cout<<"Turini kiriting: "; cin>>t;
cout<<"Yashash manzililini kiriting: "; cin>>m;
cout<<"Necha yil yashashini kiriting: "; cin>>y;
ar.at(i)=y;
par[i].parrandalar(t,m,y);
}
for (int i = 0; i {
for (int j = i + 1; j {
if (ar.at(i) >ar.at(j))
swap(ar.at(i), ar.at(j));
}
}
cout<<"\n\n";
for(int i=0; i{
cout<par[i].print();
}
par[0].saralash(par,n);
cout<<"\n\nSaralandi yashash yili bo'yicha\n\n";
for(int i=0; i{
cout<par[i].print();
}
cout<<"\nYashash yili bo'yich saralandi\n\n";
for(int i=0; i{
cout<}
}