Ushbu bo‘limda qo‘yilgan masala mazmunidan kelib chiqqan masalaning umumiy xususiytlarini o‘z ichiga olgan tayanch sinf yaratilishi va undan voris sifatida hosil bo‘lgan sinf esa bevosita qo‘yillgan masalani yechishi kerak. Masala voris sinf ob‘yektini e‘lon qilib echiladi.
Namunaviy masala
Berilgan butun n, va haqiqiy x va y qiymatlari uchun ifoda hisoblansin.
Yechish usuli
Berilgan ifoda qiymati uchta ifoda ostilari qiymatlarini alohida hisoblash va mos arifmetik amallar bajarish ko‘rinishida bajariladi. Har bir ifoda o‘zaro vorislik munosabatida bo‘lgan uchta sinf obyektlari sifatida qaraladi.
Tayanch sinf sifatida ifodani hisoblash uchun yaratilgan Ifoda_x_n sinfi bo‘lib, uning tarkibiga butun n, haqiqiy x berilgan-a’zolari, berilgan-a’zolarga qiymat beruvchi konstruktor, nusxalash konstruktori va bevosita qiymaini hisoblaydigan Hisobla() funksiya-a’zosi kiradi.
Tayanch Ifoda_x_n vorisi sifatida ifoda osti uchun Ifoda_x_y sinfi yaratilgan. Unda haqiqiy y berilgan-a’zo aniqlangan bo‘lib, x qiymati tayanch sinfdan voris sifatida olinadi. Ifoda ostilari o‘zaro bog‘liqligini inobatga oladigan bo‘lsak, Ifoda_x_y sinfi obyekti Ifoda_x_n obyekt mavjud bo‘lgandagina yuzaga kelishi mumkin va shu sababli unda nusxalash konstruktorlari qo‘llanilgan. Hisobla() funksiyasi ifoda ostisi qiymatini hisoblaydi.
O‘z navbatida ifoda ostisi uchun Ifoda_10_y sinfi Ifoda_x_y sinfi vorisi qilib aniqlangan. Unda berilgan-a’zolar yo‘q, y qiymati ajdod sinflardan vorislik bo‘yicha olinadi. Hisobla() funksiya-a’zosi qiymatini hisoblaydi.
Qo‘yilgan masala mazmuniga ko‘ra sinflar obyektlarini aniqlash qat’iy ketma-katlikda amalga oshiriladi. Oldin Ifoda_x_n, keyin unga bog‘liq Ifoda_x_y obyekti va nihoyat Ifoda_10_y sinf obyektlari aniqlanadi va umumiy ifoda qiymati hisoblanadi.
Programma matni
Unit_Ifoda.h fayli:
class Ifoda_x_n
{
protected:
double x;
int n;
public:
Ifoda_x_n(int _n, double _x){ n=_n; x=_x;}
Ifoda_x_n(Ifoda_x_n & if1){ n=if1.n; x=if1.x; }
double Hisobla(){ return pow(x,n);}
};
class Ifoda_x_y:public Ifoda_x_n
{
protected:
double y;
public:
Ifoda_x_y(double _y,Ifoda_x_n & if1):Ifoda_x_n(if1) { y=_y; }
Ifoda_x_y(Ifoda_x_y & if12): Ifoda_x_n(if12.n,if12.x) { y=if12.y;}
double Hisobla(){ return pow(x,y);}
};
class Ifoda_10_y:public Ifoda_x_y
{
public:
Ifoda_10_y(Ifoda_x_y& if_1_2):Ifoda_x_y(if_1_2){}
double Hisobla(){return pow(10,y);}
};
Ifoda_x_n * if_xn;
Ifoda_x_y* if_xy;
Ifoda_10_y * if_10y;
Do'stlaringiz bilan baham: |