- DARS. SINF KOMPONENTA FUNKTSIYALARI

|
- DARS. SINF KOMPONENTA FUNKTSIYALARI
|
bet | 69/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmui68 - DARS. SINF KOMPONENTA FUNKTSIYALARI.
Komponenta funktsiya ta'rifi.
Komponenta funktsiya albatta sinf tanasida ta'riflangan bo’lishi lozim. Global funktsiyalardan farqli komponenta funktsiya sinfning hamma komponentalariga murojaat qilishi mumkin. Funktsiyaning faqat prototipi emas to’la ta'rifi sinf tanasida joylashgan bo’lsa, bu funktsiya joylashtiruvchi (inline) funktsiya hisoblanadi. Ma'lumki inline funktsiyalarda tsikllar, kalit bo’yicha o’tish operatori ishlatilishi mumkin emas. Bundan tashqari bunday funktsiyalar rekursiv funktsiya bo’lolmaydi. Bu chegaralarni engish uchun sinf tanasiga faqat funktsiya prototipi joylashtirilib, funktsiyaning to’la ta'rifi sinf tashqarisida dasturga kiruvchi boshqa funktsiyalar bilan birga beriladi. Komponenta funktsiyani sinf tashqarisida ta'riflanganda, qaysi sinfga tegishli ekanligini qo’yidagi shaklda ko’rsatiladi:
Sinf-nomi :: Komponenta funktsiya-nomi
Sinf tanasiga komponenta funktsiya prototipi qo’yidagi shaklda joylashtiriladi:
Tip funktsiya-nomi(formal-parametrlar-ta'rifi)
Sinf tashkarisida funktsiya qo’yidagi shaklda ta'riflanadi:
Tip sinf-nomi :: funktsiya-nomi(formal-parametrlar-spetsifikatsiyasi)
{ funktsiya tanasi };
Oldingi misoldagi employee sinfida funktsiya sinf ichida ta'riflangan. Bunday funktsiya joylanuvchi (inline) funktsiya deb qaraladi. Funktsiyani sinf tashqarisida ta'riflab sinf ichiga funktsiya prototipini joylashtirish mumkin. Sinf ta'rifi bu holda qo’yidagi kurinishda bo’ladi:
class employee
{
public:
char name[64];
long employee_id;
float salary;
void show_employee(void); |————————> Prototip funktsii
};
Har hil funktsiyalar bir hil nomli funktsiyalardan foydalanishi mumkin bo’lgani uchun funktsiya nomi sinf nom va global ruhsat operatori belgisi (::) qo’yilishi lozim.
void employee:: show_employee (void) //-------------->Imya klassa
{
sout << "Imya: " << name << endl; Imya elementa cout << "Nomer slujathego: " << employee_id << endl;
cout << "Oklad: " << salary << endl;
};
. Qo’yidagi CLASSFUN.CPP dastur show_employee funktsiyasi ta'rifini sinf tashqarisiga joylashtiradi:
#include
#include
class employee
{
public:
char name [64];
long employee_id;
float salary;
void show_employee(void);
};
void employee::show_employee(void)
{
cout << "Imya: " << name << endl;
cout << "Nomer slujathego: " << employee_id << endl;
cout << "Oklad: " << salary << endl;
};
void main(void)
{
employee worker, boss;
strcpy(worker.name, "John Doe");
worker.employee_id = 12345;
worker.salary = 25000;
strcpy(boss.name, "Happy Jamsa");
boss.employee_id = 101;
boss.salary = 101101.00;
worker.show_employee();
boss.show_employee();
}
Ikkinchi misol:
Bu misolda PEDIGREE.CPP dasturida dog, sinfi kiritiladi. Dasturda sinf funktsiyasi show_breed tashqarisida ta'riflanadi. So’ngra dog tipidagi ikki ob'ekt yaratilib, har biri haqidagi ma'lumot ekranga chiqariladi
#include
#include
class dogs
{
public:
char breed[64];
int average_weight;
int average_height;
void show_dog(void) ;
};
void dogs::show_breed(void)
{
cout << "Poroda: " << breed << endl;
cout << "Sredniy ves: " << average_weight << endl;
cout << "Srednyaya vihsota: " << average_height << endl;
}
void main(void)
{
dogs happy, matt;
strcpy(happy.breed, "Dolmatin") ;
happy.average_weight = 58;
happy.average_height = 24;
strcpy(matt.breed, "Kolli");
matt.average_weight =22;
matt.average_height = 15;
happy.show_breed() ;
matt.show_breed();
}
3 misol
Misol tariqasida nuqta tushunchasini aniqlovchi Point.L fayliga yozib qo’yamiz:
# includef Point.h
#define Point1.h
class point {
protected:
int x,y;
public;
Point ( int xi=0, int yi=0);
Int& givex(void);
Int& givey (void);
Void show(void);
Void move(int xn=0, int yn=0);
Private:
Void hid();
}
#endif
Kelgusida point sinfini boshqa sinflarga qo’shish mumkin bo’lgani uchun shartli protsessor direktivasi #ifndef POINT.H ishlatilgan. Protsessorli identifikator POINT.H #define POINT1.H direktivasi orqali kiritilgan.
Shuning uchun # include “point.h” direktivasi bir necha marta ishlatilganda ham POINT sinfi ta'rifi teksti faqat bir marta kompilyatsiya qilinayotgan faylda paydo bo’ladi. POINT sinfi komponenta funktsiyalarini qo’yidagicha ta'riflaymiz:
#ifndef POINT.CPP
#define POINT1.CPP
#include
#include “point.h”
Point ::point(int xi=0, int yi=0)
{ x=xi; y=yi;}
int &point::givex(void) {return x;}
int &point::givey(void) {return y;}
void point::show(void)
{putpixel(x,y,get color());}
void point::hide (void)
{ putpixel(x,y,get b color());}
void point::move(int xn=0, int yn=0)
{ hide( );
x=xn; y=yn;
show( );
}
#endif
sinf ta'rifida qo’yidagi grafik funktsiyalar ishlatiladi:
void putpixel(intx; inty; int color)
Ekranda color rangli(x,y) kordinatali nuqtani tasvirlaydi.
Int getbcolor(void)
Fon rangini qaytaradi
Int getcolor(void)
Tasvir rangini qaytaradi.
Kiritilgan point sinfi va komponenta funktsiyalari bilan ishlovchi dasturni keltiramiz:
#include
#include
#include “point.epp”
void main()
{ point A(200,50);
point B;
point D(500,200);
int dr=Detect, mod;
initgraph(&dr, &mod, ”c:\borland\bgi”);
|
| |