Vorislikka asoslanib grafik sinflarni yaratish




Download 47.9 Kb.
bet5/8
Sana08.04.2023
Hajmi47.9 Kb.
#49682
1   2   3   4   5   6   7   8
Bog'liq
Xakimova Gulchiroy
893429, Ijtimoiy pedagogik texnalogiyasi strukturasi va mazmuni, Sheriyatda petik uslub va ijodiy individuallik, TOʻPLAMLAR USTIDA AMALLAR, SHAXSIY ISH REJA yangi. X. Maxmudov (3), 1-Internet ma`lum, Mustaqillik yillarida ijrochilik (1), АндДУ 1-сонли баён ижроси, Ochiq dars 2021 Pilla chuvish sexida hosil boladigan chiqindilar, 1.Ахборот ва унинг ахамияти, АСТРОФИЗИКА, Kurs ishi titul yangi, Turgunova Madina, Raximova Sanobar
3. Vorislikka asoslanib grafik sinflarni yaratish
Grafik sinflarda vorislikkka misol. Keyingi misolda " ekrandagi nuqta" asosida " ekrandagi darcha " sinfi yaratiladi.
Nasldan o‘tuvchi komponentalarga qo‘shimcha spot sinfiga quyidagi kompanentalarni kiritamiz: tasvir radiusi (rad); ekranda ko‘rinishi belgisi (vir=0ekranda tasvir yuk; vi1==1ekranda tasvir bor); tasvirni bitli matnda saqlash belgisi (tag=0 tasvir saqlanmaydi; tag==1 tasvir saqlanadi); tasvirni bitli matnda saqlash uchun ajratilgan xotira qismiga ko‘rsatgich pspot.
//Spot.cpp
#ifndef SPOT
#define SPOT 1
#include "point. cpp"
class spot: public point
{
int rad;
int vil;
int tag;
void * pspot;
public:
spot (int xi, int yi, int ri): point (xi, yi)}
{
int size;
vir =0; tag=0; rad=ri;
size=imagesize (xi-ri, yi-ri, xis- ri, yi- ri);
pspot=new char [size];
}
~ spot ()
{
hide();
tag =0;
delete[] pspot;
}
void show ()
{
if (tag==0)
{
circle (x, y, rad);
floodfill (x, y, getcolor ());
getimage (x-rad, y-rad, y+rad, pspot);
tag=1;
};
else
putimage (x-rad, y-rad, pspot, XOR_PUT);
vis=1;
}
void hide ()
{
if (vis==0) return;
putimage (x-rad,y-rad, pspot, XOR_PUT);
vis=0;
}
void move (int xn, int yn)
{
hide ();
x= xn; y=yn;
show ();
}
viod vary (float dr)
{
float a;
int size;
hide ();
tag=0;
delete pspot;
a=dr*rad;
if (a<=0) rad=0;
else rad= (int) a;
size=imagesize (x-rad; y-rad, x+rad, y+rad);
pspot=new char [size];
show ();
}
int& giver (void);
{
return rad;
}
};
# endif
Spot sinfida konstruktor, destruktor ~ spot ()va beshta metod ko‘rsatilgan:
show ()-- ekranga doirani chizib, bitli tasvirni xotiraga olish;
hide ()-- ekrandan doira tasvirini uchirish;
move ()--tasvirni ekranning bitta joyiga kuchirish;
vary ()--ekrandagi tasvirni uzgartirish (kichkinalashtirish yoki kattalashtirish);
giver ()--doira radiusiga murojatni ta’minlash;
point sinfidan spot sinfi naslga nuqta markazi (x,u) koordinatalarini va givex, givey metodlarni oladi, point:
show ()va point : : move () metodini xuddi shu nomli yangi funktsiyalar bilan almashtirilgan point :: hide()funktsiyasi nomi o‘tmaydi, chunki point sinfida u xususiy (private) statusiga ega.
spot()konstruktori uch parametrga ega -markaz koordinatalari (xi,yi) va doira radiusi (ri).
Avval point sinfi konstruktori chaqiriladi bu konstruktor xi,yi ga mos keluvchi xaqiqiy parametr asosida doira markazini aniklaydi. Asosiy sinf konstruktori xar doim xosilaviy sinf
konstruktoridan oldin chaakiriladi. Sungra spot()sinfi konstruktolari boshlanadi. Bu konstruktor vis, tag parametrlarining boshlangich qiymatini aniklaydi va ri ga mos keluvchi xaqiqiy parametr qiymati asosida doira radiusi red aniklanadi. Standart funktsiya imagesize yordamida doira joylashuvchi kvadratik operativ xotirada aniqlash uchun zarur bulgan xotira xajmi xisoblanadi. Kerakli xotira new standart operatsiya yordamida ajratib size elementidan iborat char massivlar yoziladi. Agar aytilgan xotira spot sinfida protected statutisiga ega bulgan pspotko‘rsatkichiga ulanadi.
Vorislikda destruktorlar xossalari. Sinfning xar bir ob’ekti yaratilganda sinf konstruktori chaqirilib, ob’ekt uchun kerakli xotira yaratish va initsializatsiya qilish vazifalarini bajaradi. Ob’ekt yukotilganda yoki sinf ta’sir doirasidan tashqariga chiqilganda teskari vazifalar bajarish kerak bo‘lib, bular ichida eng keraklisi xotirani ozod kilishdir. Bu vazifalarni boshkarish uchun sinfga maxsus funktsiya destruktor kiritiladi. Destruktor quyidagi shaklga ega bo‘lgan anik nomga ega ~ sinf-nomi.
Destruktor xatto void tipidagi parametrlarga ega bo‘lmaydi va xatto void tipidagi qiymat qaytarmaydi. Destruktor statusi aloxida e’lon qilinmagan bo‘lsa umumiydir.
Sodda sinflarda destruktor avtomatik aniklanadi, misol uchun paint sinfida destruktor e’lon kilinmagan va kompilyator quyidagi destruktorni avtomatik chakiradi.
~ point () {};
spot sinfida destruktor aniq ko‘rinishga ega;
~ spot () {hide (); tag=0;delete [] pspot;}
Bu destruktor vazifalari doira tasvirini spot::hide() funktsiyasi orkali o‘chirish; tagbelgisiga 0 qiymatini berish; ob’ekt bitli tasvirni saklash uchun ajratilgan xotirani tozalash.
Destruktorlar naslga o‘tmaydi, shuning uchun xosilaviy sinfda destruktor mavjud bo‘lmasa asosiy sinfdagi destruktor chaqirilmaydi.
Balki kompilyator tomonidan yaratiladi. Ko‘rilayotgan misolda quyidagicha:
public: ~spot () {~point ();}
Asosiy sinflar destruktorlar ro‘yxatda ko‘rsatilganidek teskari tartibda boshqariladi. SHunday qilib ob’ektlarni o‘chirish tartibi yaratilish tartibiga teskaridir. Agar ob’ekt yaratilganda dasturda xotira ajratilgan bulsa destruktor dasturda chaqirilishi lozim.
Spot sinfi ob’ektlari bilan ishlovchi dasturni keltiramiz:
#include
#include
#include "spot. cpp"
int main()
{
int dr=DETECT, mod;
initgraph (&dr, &mod);
{
spot A(200,50,20);
spot D(500,200,30);
A.show();
getch ();
D.show ();
getch();
A.move(50,60);
getch ();
}
closegraph();
return 0;
}
Grafik abstrakt sinf va uning vorislariga misol. Quyidagi misolda abstrakt sinflar umumiy tushunchalarni tavsiflash uchun ishlatiladi point sinfi vorisi sifatida figure abstrakt sinfi yaratiladi. Bu sinfda konstruktor, sof virtual funktsiya show (),xamda hide() va move() metodlari aniqlangan. Dasturda figure sinfi asosida ikkita avlod sinf circle (aylana) va ellips (elips) sinflari aniqlanadi.
Ikkala sinfda point sinfidan shakllar markazlari koordinatalari naslga o‘tgan. Ikkala sinfda konkret show()metod aniqlangan va figure ()abstrakt sinfidan move()va hide() funktsiyalari naslga o‘tgan.
// figure.cpp abstrakt sinf
# include "point.cpp"
class figure: public point
{
public :
//figure sinf konstruktori
figure (point p) :point (p.give x(), p.give y()){}
// sof virtual funktsiya
virtual void show() = 0;
// figurani o‘chirish funktsiyasi
void hide()
{
int bk,cc;
bk = getbkcolor();
cc = getcolor();
setcolor(bk);
show();
setcolor(cc);
}
// figurani xarakatlantirish funktsiyasi
void move (point p)
{
hide ();
x=p.givex();y=p.givey();
show();
}
};

figure abstrakt sinf asosida konkret sinflar yaratamiz;


// ELLIPS CPP
class ellips: public figure
{
int rx, ry;
public:
// konstruktor
ellips(point d, int radx, int rady): figure (d)
{
rx = radx; ry = rady;
}
void show()
{
ellipse (x,y,0, 360, rx, ry);
return;
}
};

// circ.fig aylana sinfi


class circ: public figure
{
int radius;
public:
// konstruktor
circ (point e, int rad): figure (e)
{
radius=rad;
}
void show () {
circle(x,y,radius);
}
};
quyidagi dasturda uchta sinf xammasi ishlatilgan;
# include
# include "figure.cpp"
# include "circ.fig"
# include "ellips.fig"
# include

int main ()


{
point A(100,80), B(300,200);
circ C(A,60);
ellips E(B,200,100);
{
int dir = DETECT, mod;
initgraph (&dir, &mod, "c\\borlandc\\ bgi");
A.show (); getch();
B.show (); getch();
C.show (); getch();
E.show (); getch();
C.move(B); getch();
E.hide(); getch();
C.hide(); getch();
}
closegraph();
return 0;
}



Download 47.9 Kb.
1   2   3   4   5   6   7   8




Download 47.9 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Vorislikka asoslanib grafik sinflarni yaratish

Download 47.9 Kb.