Klasslar va obyektlar yaratish



Yüklə 80 Kb.
səhifə1/3
tarix02.12.2023
ölçüsü80 Kb.
#171127
  1   2   3
asld


KLASSLAR VA OBYEKTLAR YARATISH

REJA:




  1. Obyekt tushunchasi.

  2. Klass tushunchasi.

  3. Murojaat huquqlari.

  4. Konstruktor.

  5. Destruktor.

  6. Xulosa.

  7. Foydalanilgan adabiyotlar.

Klass-struktura tushunchasi kengaytmasi sifatida. Klasslarni eng sodda holda quyidagicha tasvirlash mumkin:


Klass-kaliti Klass-soni {komponentalar ro‘yxati}
Klass komponentalari sodda holda tiplangan ma’lumotlar va funksiyalardan iborat bo‘ladi. Figurali kavslarga olingan komponentalar ro‘yxati Klass tanasi deb ataladi. Klassga tegishli funksiyalar komponenta-funksiyalar yoki Klass funksiyalari deb ataladi.
Klass kaliti sifatida Struct xizmatchi so‘zi ishlatilishi mumkin. Masalan quyidagi konstruksiya kompleks son Klassini kiritadi.
struct complex
{
double real;
double imag;
void define (double re=0.0, double im=0.0)
{
real=re; imag=im;
}
void display (void)
{
cout<=”real=”<cout<=”imag=”<}
};
Strukturadan bu Klassning farqi shuki komponenta ma’lumotlardan (real, imag) tashqari ikkita komponenta funksiya (define() va display ()) kiritilgan.
Bu kiritilgan Klass o‘zgaruvchilar tipi deb karalishi mumkin. Bu tiplar erdamida konkret ob’ektlarni quyidagicha tasvirlash mumkin:
Misol uchun:
complex x,y;
complex dim[8];
Klassga tegishli ob’ektlar quyidagicha tasvirlanadi;

Klass-nomi.ob’ekt-nomi


Dasturda ob’ekt komponentasiga quyidagicha murojat kilish mumkin:
Klass-nomi.ob’ekt-nomi :: komponenta-nomi yoki soddarok holda
Ob’ekt-nomi. Element-nomi

Misol uchun:


x.real=1.24;
x.imag=0.0;
dim[3]. Real=0.25;
dim[3]. Imag=0.0;
Klassga tegishli funksiyalarga quyidagicha murojat qilinadi:
ob’ekt-nomi. funksiya-nomi
Misol uchun:
X. define(0.9) (Bu holda real=0.9 va imag=0.0)
X. define(4.3,20.0) (Bu holda kompleks son 4.3+i*20.0)
Display funksiyasi ekranda kompleks son qiymatlarini tasvirlaydi.
Komponenta o‘zgaruvchilar va komponenta funksiyalar.Klass kompanenta o‘zgaruvchilari sifatida o‘zgaruvchilar , massivlar, ko‘rsatkichlar ishlatilishi mumkin. Elementlar ta’riflanganda initsializatsiya kilish mumkin emas. Buning sababi shuki Klass uchun xotiradan joy ajratilmaydi. Kompanenta elementlariga kompanenta funksiyalar orkali murojat qilinganda faqat nomlari ishlatiladi Klassdan tashqarida Klass elementlariga emas ob’ekt elementlariga murojat kilish mumkin . Bu murojat ikki xil bo‘lishi mumkindir.
Ob’ekt- nomi . Element - nomi.
Klass elementlari Klassga tegishli funksiyalarida ishlatilishidan oldin ta’riflangan bo‘lishi shart emas. Xuddi shunday bir funksiyadan xali ta’rifi berilmagan ikkinchi funksiyaga murojaat kilish mumkin.
Komponentalarga murojaat xukuklari. Komponentalarga murojaat xuquqi murojaat spetsifikatorlari yordamida boshkariladi. Bu spetsifikatorlar:
Protected – ximoyalangan;
Private – xususiy;
Public – umumiy;
Ximoyalangan kompanentalardan Klasslar ierarxiyasi qurilganda foydalaniladi. Oddiy holda Protected spetsifikatori Private spetsifikatoriga ekvivalentdir. Umumiy ya’ni Public tipidagi komponentalarga dasturning ixtiyoriy joyida murojaat kilinishi mumkin.
Xususiy ya’ni Private tipidagi komponentalarga Klass tashqarisidan murojaat qilish mumkin emas. Agar Klasslar Struct xizmatchi so‘zi bilan kiritilgan bo‘lsa, uning hamma komponentalari umumiy Public bo‘ladi, lekin bu xuquqni murojaat spetsifikatorlari yordamida o‘zgartirish mumkin.
Agar Klass Class xizmatchi so‘zi orkali ta’riflangan bo‘lsa, uning hamma komponentalari xususiy bo‘ladi. Lekin bu xuquqni murojaat spetsifikatorlari yordamida o‘zgartirish mumkindir.
Bu spetsifikator yordamida Klasslar umumiy holda quyidagicha ta’riflanadi:

class class_name


{
int data_member; // Ma’lumot-element
void show_member(int); // Funksiya-element
};
Klass ta’riflangandan so‘ng, shu Klass tipidagi o‘zgaruvchilarni(ob’ektlarni) quyidagicha ta’riflash mumkin:
class_name object_one, object_two, object_three;
Quyidagi misolda employee, Klassi kiritilgandir:
class employee
{
public:
long employee_id;
float salary;
void show_employee(void)
{
cout<<"Nomer: "<cout<<"Maosh: "<};
};
Bu Klass ikki o‘zgaruvchi va bitta funksiya-elementga ega.
Quyidagi dastur ikki employee ob’ektini yaratadi. Nuqta operatordan foydalanib ma’lumot elementlarga qiymat beriladi so‘ngra show_employee elementidan foydalanib xizmatchi xakidagi ma’lumot ekranga chikariladi:
#include
using namespace std;
class employee
{
public:
long employee_id;
float salary;
void show_employee(void)
{
cout<<"Nomer: "<cout<<"Maosh: "<};
};
int main()
{
employee worker, boss;
worker.employee_id = 12345;
worker.salary = 25000;
boss.employee_id = 101;
boss.salary = 101101.00;
cout<<"\n"<<"ishchi"<worker.show_employee();
cout<<"\n"<<"boss"<boss.show_employee();
return 0;
}
Komponenta funksiya ta’rifi. Komponenta funksiya albatta Klass tanasida ta’riflangan bo‘lishi lozim. Global funksiyalardan farqli komponenta funksiya Klassning hamma komponentalariga murojat qilishi mumkin. Funksiyaning faqat prototipi emas to‘la ta’rifi Klass tanasida joylashgan bo‘lsa, bu funksiya joylashtiruvchi (inline) funksiya hisoblanadi. Ma’lumki inline funksiyalardassikllar, kalit bo‘yicha o‘tish operatori ishlatilishi mumkin emas. Bundan tashqari bunday funksiyalar rekursiv funksiya bo‘lolmaydi. Bu chegaralarni engish uchun Klass tanasiga faqat funksiya prototipi joylashtirilib, funksiyaning to‘la ta’rifi Klass tashqarisida dasturga kiruvchi boshqa funksiyalar bilan birga beriladi. Komponenta funksiyani Klass tashqarisida ta’riflanganda, qaysi Klassga tegishli ekanligini quyidagi shaklda ko‘rsatiladi:
Klass-nomi :: Komponenta funksiya-nomi
Klass tanasiga komponenta funksiya prototipi quyidagi shaklda joylashtiriladi:
Tip funksiya-nomi(formal-parametrlar-ta’rifi)
Klass tashqarisida funksiya quyidagi shaklda ta’riflanadi:
Tip Klass-nomi :: funksiya-nomi(formal-parametrlar-spetsifikatsiyasi)
{ funksiya tanasi };
Oldingi misoldagi employee Klassida funksiya Klass ichida ta’riflangan. Bunday funksiya joylanuvchi (inline) funksiya deb qaraladi.
Funksiyani Klass tashqarisida ta’riflab Klass ichiga funksiya prototipini joylashtirish mumkin. Klass ta’rifi bu holda quyidagi ko‘rinishda bo‘ladi:
class employee
{
public:
long employee_id;
float salary;
void show_employee(void);
};
Har xil funksiyalar bir xil nomli funksiyalardan foydalanishi mumkin bo‘lgani uchun funksiya nomi Klass nomi va global ruxsat operatori belgisi (::) qo‘yilishi lozim.
void employee::show_employee(void)
{
cout<<"Nomer: "<cout<<"Maosh: "<};
Funksiya Klass tashqarisida ta’riflangan bo‘lsa ularni inline funksiya sifatida qarash uchun funksiya ta’rifida inline so‘zi aniq ko‘rsatilgan bo‘lishi kerak.
Quyidagi dastur show_employee funksiyasi ta’rifini Klass tashqarisiga joylashtiradi va inline so‘zi anik ko‘rsatiladi:
#include
using namespace std;
class employee
{
public:
long employee_id;
float salary;
void show_employee(void);
};
inline void employee::show_employee(void)
{
cout<<"Nomer: "<cout<<"Maosh: "<};

int main()


{
employee worker, boss;
worker.employee_id = 12345;
worker.salary = 25000;
boss.employee_id = 101;
boss.salary = 101101.00;
cout<<"\n"<<"ishchi"<worker.show_employee();
cout<<"\n"<<"boss"<boss.show_employee();
return 0;
}

Yüklə 80 Kb.

Dostları ilə paylaş:
  1   2   3




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin