Kitob uchta qismdan iborat. "Strukturali dasturlash", "Obyektli-yo’nalishli dasturlash", "Standart kutubxonalar"



Download 333,2 Kb.
bet59/90
Sana10.07.2022
Hajmi333,2 Kb.
#770437
1   ...   55   56   57   58   59   60   61   62   ...   90
Bog'liq
C majmua

this ko’rsatgichi

Har bir obyekt o’zining sinf maydonlari nusxasiga ega. Sinf usullari yagona nusxada xotirada joylashgan va barcha obyektlar bilan birgalikda foydalaniladi, shuning uchun qaysi obyekt uchun mo’ljallab chaqirilgan bo’lsa, o’sha obyektning maydonlari bilan usullarning ishlashini ta’minlashi zarur. Bu yashirin parameter this ning funksiyasiga uzatish bilan ta’minlanadi, unda funksiya chaqirgan obyektga constant ko’rsatgich saqlanadi. this ko’rsatgich usul ichida obyekt elementlariga murojaatlar uchun oshkormas tarzda foydalaniladi. Oshkor holda bu ko’ratgich asosan chaqirilgan obyektga ko’rsatgich (return this:) yoki murojaat (return *this:) usulida qaytarish uchun ishlatiladi.


this ko’rsatgich foydalanishni namoyish etish uchun yuqorida keltirilgan monstr sinfiga biri usulni chaqiradigan, ikkinchisi unga parameter sifatida beriladigan ikkita monstrdan eng sog’lomrog’i (health maydoni) ga murojaatni qaytaruvchi yangi usulni qo’shamiz (usulni sinf tavsifining public seksiyasiga joylashtirish mumkin):

monstr & the_best(monstr &М){


if ( health > М.health) return *this;
return M;
}
… monstr Vasia(50), Super(200);
// Best yangi obyekt Super maydonlar qiymatlari bilan initsializatsiyalanadi:
Monstr Best = Vasia.the_best(Super);

this ko’rsatgichni sinf maydonini identifikatsiyalash uchun uning nomi usulning formal parametrik nomi bilan ustma-ust tushgan holda ham qo’llaniladi. Maydonni identifikatsiyalashning boshqa yo’li ko’rinish sohasiga kirish amalidan faydalanadi:


void cure(int health, int ammo){


this → health += health; // thisdan foydalanish
monstr:: ammo += ammo; // :: amaldan foydalanish
}


Konstruktorlar

Konstrukrtor obyektni initsializatsiyalash uchun mo’ljallangan va uni yaratishda avtomatik chaqiriladi. Quyida konstruktorlarning asosiy xossalari sanab o’tilgan:



  • Konstruktor qiymatni qaytarmaydi hatto void tipida bo’lsa ham. Konstruktordan ko’rsatgich olish mumkin emas.

  • Sinf turli ko’rinishdagi initsializatsiyalar uchun turlicha parametrli bir nechta konstruktorga ega bo’lishi mumkin (bunda ortiqcha yuklash mexanizmi ishlatiladi).

  • Parametrlarsiz chaqiriladigan konstruktor jimlik bo’yicha konstruktor deb ataladi.

  • Konstruktorning parametrlari bu sinfdan tashqari ixtiyoriy tipga ega bo’lishi mumkin. Jimlik bo’yicha parametrlar qiymatlarini berish mumkin. Ularni konstruktorlardan faqat bittasi o’z ichiga olishi mumkin.

  • Agar dasturchi birorta ham konstruktorni ko’rsatmagan bo’lsa, u holda kompilyator uni avtomatik yaratadi. Bunday konstruktor sinf maydonlari uchun jimlik bo’yicha konstruktorlarni va bazaviy sinflarning jimlik bo’yicha konstruktorlarini chaqiradi. Sinf konstanta va iqtiboslarni (murojaatlarni) o’z ichiga olgan holda, sinf obyektini yaratishga urinishda xato chiqariladi, chunki ularni konkret qiymatlar bilan initsializatsiyalash zarur, jimlik bo’yicha konstruktor esa buni bajara olmaydi.

  • Konstruktorlardan meros qolmaydi.

  • Konstruktorlarni const, virtual va static modifikatorlar bilan tavsiflash mumkin emas.

  • Global obyektlar konstruktorlari main funksiyasi chaqirilguncha chaqiriladi. Lokal obyektlar ularning amallar sohasi faol bo’lgandan so’ng yaratiladi. Konstruktor vaqtinchalik obyektni yaratishda ham ishga tushiriladi (masalan, funksiyadan obyektni uzatishda).

  • Konstruktor agar dasturda qandaydir sintaksis konstruksiyalar uchraganda ham chaqiriladi:

sinf_nomi obyekt_nomi [(parametrlar ro’yxati)];


// Parametrlar ro’yxati bo’sh bo’lishi mumkin emas
sinf_nomi (parametrlar ro’yxati):
// Nomsiz obyekt yaratiladi (ro’yxat bo’sh bo’lishi mumkin)
sinf_nomi obyekt_nomi = ifoda;
// Nomsiz obyektlar yaratiladi va nusxalanadi

Misollar:


monstr Super(200, 300), Vasia(50), Z;


monstr X = monstr(1000);
monstr Y = 500;

Birinchi obyektda uchta obyekt yaratiladi. Ko’rsatilmagan parametrlar qiymatlari jimlik bo’yicha o’rnatiladi.


Ikkinchi operatorda health = 1000 parametr qiymatli nomsiz obyekt yaratiladi (ikkinchi parametr qiymati jimlik bo’yicha o’rnatiladi). X obyektga xotira ajratiladi, unga nomsiz obyekt nusxalanadi.
Oxirida operatorda health = 500 parametr qiymatli nomsiz obyekt yaratiladi (ikkinchi parametr qiymati jimlik bo’yicha o’rnatiladi). Y obyekt uchun xotira ajratiladi, unga nomsiz obyekt nusxa qilinadi. Obyektning yaratishning bunday shakli obyektni initsializatsiyalash uchun bitta parametrni beriladigan holda mumkin bo’ladi.
Bir nechta konstruktorni sinfga misol sifatida yuqorida tavsiflangan monstr sinfini unga rang (skin) va nom (name) beruvchi maydonlarni qo’shib takomillashtiramiz:

enum color{red,green,blue}; // Rangning mumkin bo’lgan qiymatlari


class monstr {
int health, ammo ;
color skin;
char *name;
public:
monstr (in the = 100, int am = 10);
monstr (color sk);
monstr (char * nam);
int get_health(){return health;}
int get_ammo(){return ammo;}

};
//---------------------------------------
monstr::monstr(int he, int am){
health = he; ammo = am; skin = red; name = 0;
}
//---------------------------------------
monstr::monstr(color sk){
switch (sk){
case red : health = 100; ammo = 10; skin = red; name = 0; break;
case green : health = 100; ammo = 20; skin = green; name = 0; break;
case blue : health = 100; ammo = 40; skin = blue; name = 0; break;
}
}
//--------------------------------------
monstr::monstr(char * nam){
name=newchar[strlen(nam)+1] ;
// nol-simvolni saqlash uchun satr uzunligiga 1 qo’shiladi
strcpy(name, nam):
health = 100; ammo = 10; skin = red;
}

//---------------------------------------
monstr * m = new monstr ("Ork");
monstr Green (green);

Yuqorida keltirilgan konstruktorlardan birinchisi jimlik bo’yicha konstruktor hisoblanadi, chunki uni parametrlarsiz chaqirish mumkin. monstr sinf obyektlarini turlicha usullar bilan initsializatsiyalash mumkin, talab qilinuvchi konstruktor qavslardagi qiymatlar ro’yxatiga bog’liq ravishda chaqiriladi. Bir nechta konstruktorlar berilganda ortiqcha yuklanishli funksiyalarni yozishdagi kabi qoidalarga rioya qilish lozim – kompilyatorda zarur variantni topib olish imkoniyati bo’lishi lozim.


Konstruktorda maydonlarni initsializatsiyalashning yana bir usuli mavjud (yuqorida keltirilgan dasturda foydalanilgan maydonlarga formal parametrlar qiymatlarini berishdan tashqari) – sarlavha va konstruktor jismi orasidagi ikki nuqtadan keyin joylashgan initsializatorlar yordamida:
monstr::monstr(int he, int am);
health (he), ammo (am), skin (red), name (0){ }

Maydonlar vergul orqali sanab o’tiladi. Har bir maydon uchun qavslarda ifoda bo’lishi mumkin bo’lgan initsializatsiyalanuvchi qiymat ko’rsatiladi. Bu usulsiz konstanta-maydon, murojaat-maydonlar va obyektlar-maydonlarini initsializatsiya qilib bo’lmaydi. Oxirgi xolda qavslarda ko’rsatilgan parametrlarga mos konstruktor chaqiriladi.





Download 333,2 Kb.

Do'stlaringiz bilan baham:
1   ...   55   56   57   58   59   60   61   62   ...   90




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish