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”);}
Do'stlaringiz bilan baham: |