Toshkent axborot texnologiyalari universiteti urganch filiali


Boshlang’ich berilgan konstruktor va destruktorlar



Download 11,45 Mb.
bet15/62
Sana16.01.2022
Hajmi11,45 Mb.
#377413
1   ...   11   12   13   14   15   16   17   18   ...   62
Bog'liq
Laboratoriya ishlarini bajarish bo'yicha o'quv-uslubiy ko'rsatma

Boshlang’ich berilgan konstruktor va destruktorlar


Agarda siz konstruktor yoki destruktorni aniqlamasangiz, siz uchun bu ishni kompilyatorning o’zi bajaradi. Standart konstruktor va destruktorlar birorta argument qabul qilmaydi va hech qanday amal bajarmaydi.

6.3. – listing. Konstruktor va destruktorlarni qo’llanilishi

  1. #include

  2. class Mushuk

  3. {

  4. public:

  5. Mushuk(int BoshlYosh);

  6. ~Cat( );

  7. int GetYosh();

  8. void SetYosh(int yosh);

  9. void Miyovlash();

  10. private:

  11. int itsYosh;

  12. };

  13. // Mushuk sinfi konstruktori

  14. Mushuk::Mushuk(int BoshlYosh)

  15. {

  16. itsYoshq BoshlYosh;

  17. }

  18. Mushuk::~Mushuk( )

  19. {

  20. }

  21. //GetYosh funksiyasi itsYosh o’zgaruvchi

  22. //a’zosining qiymatini kaytaradi

  23. int Mushuk:: GetYosh()

  24. {

  25. return itsYosh;

  26. }

  27. //SetYosh funksiyasi itsYosh o’zgaruvchi –

  28. //a’zosiga qiymat o’zlashtiradi.

  29. void Mushuk::SetYosh(int yosh)

  30. {

  31. itsYoshq yosh;

  32. }

  33. // Meow funksiyasi ekranga Miyov yozuvini

  34. // chiqarish uchun ishlatiladi.

  35. void Mushuk:: Meow()

  36. {

  37. cout << “Miyov.\n”;

  38. }

  39. int main()

  40. {

  41. Mushuk Frisky(5);

  42. Frisky.Meow();

  43. cout << “Frisky”<

  44. cout <<“yoshdagi mushuk.g’n”;

  45. Frisky.Meow();

  46. Frisky.SetYosh(7);

  47. cout<< “Hozir Frisky ”<

  48. cout << “yoshda.g’n”;

  49. return 0;

  50. }

NATIJA

Miyov.

Frisky 5 yoshda.

Miyov.

Hozir Frisky 7 yoshda.

Topshiriqlar:

Variantda ko’rsatilgan sinf obyekti yaratish hamda uning elementlarini qayta ishlash uchun sinf konsturktorlari hamda destruktorlarini yarating.





Variantlar




Resurs (IN, sana, egasi)

Murojaat (TN, ism, status, sana, IN)

1

Resurs statistikasi; Tuzatish

2

Resurs statistikasi; O’chirish

3

Foydalanuvchi statistikasi; Tuzatish

4

Foydalanuvchi statistikasi; O’chirish




Resurs (IN, sana, ximoya)

Murojaat (TN, ism, status, sana, IN)

5

Resurs statistikasi; Tuzatish

6

Resurs statistikasi; O’chirish

7

Foydalanuvchi statistikasi; Tuzatish

8

Foydalanuvchi statistikasi; O’chirish




Resurs (IN, sana, reyting)

Murojaat (TN, ism, reyting, sana, IN)

9

Resurs statistikasi; Tuzatish

10

Resurs statistikasi; O’chirish

11

Foydalanuvchi statistikasi; Tuzatish

11

Foydalanuvchi statistikasi; O’chirish




Resurs (IN, sana, parol)

Murojaat (TN, ism, parol, sana, IN)

13

Resurs statistikasi; Tuzatish

14

Foydalanuvchi statistikasi; O’chirish

15

Resurs statistikasi; O’chirish


Nazorat savollari:

  1. Konstruktor nima?

  2. Konstruktor nima uchun tipsiz e’lon qilinadi?

  3. Konstruktorni yaratishni necha xil usulini bilasiz?

  4. Destruktor nima?

  5. Konstruktorni destruktordan nima ajratib turadi?

Tajriba ishi № 5

Mavzu: Microsoft Visual C++ da sinflardagi ma’lumotlarni himoyalash inkapsulyatsiya

Ishni bajarishdan maqsad: Visual Studio 2012 muhitida C++ dasturlash tilida inkapsulyatsiyani qo’llashni o’rganish.

Nazariy qism:

Inkapsulyatsiya

Agarda muhandis ishlab chiqarish jarayonida rezistorni qo’llasa, u buni yangidan ixtiro qilmaydi, omborga (magazinga) borib mos parametrlarga muvofiq kerakli detalni tanlaydi. Bu holda muhandis joriy rezistor qanday tuzilganligiga e’tiborini qaratmaydi, rezistor faqatgina zavod xarakteristikalariga muvofiq ishlasa etarlidir. Aynan shu tashqi konstruktsiyada qo’llaniladigan yashirinlik yoki obyektni yashirinligi yoki avtonomligi xossasi inkapsulyatsiya deyiladi.

Inkapsulyatsiya yordamida berilganlarni yashirish ta’minlanadi. Bu juda yaxshi xarakteristika bo’lib foydalanuvchi o’zi ishlatayotgan obyektning ichki ishlari haqida umuman o’ylamaydi. Haqiqatan ham, xolodilnikni ishlatishda refrijektorni ishlash tamoyilini bilish shart emas. Yaxshi ishlab chiqilgan dastur obyektini qo’llashda uning ichki o’zgaruvchilarining o’zaro munosabati haqida qayg’urish zarur emas.

Yana bir marta takrorlash joizki, rezistorni samarali qo’llash uchun uning ishlash tamoyili va ichki qurilmalari haqidagi ma’lumotlarni bilish umuman shart emas. Rezistorning barcha xususiyatlari inkapsulyatsiya qilingan, ya’ni yashirilgan. Rezistor faqatgina o’z funksiyasini bajarishi etarlidir.

C++ tilida inkapsulyatsiya tamoyili sinf deb ataluvchi nostandart tiplarni(foydalanuvchi tiplarini) hosil qilish orqali himoya qilinadi.

Sinflar qanday tuzilishga ega ekanligi bilan keyinroq tanishib chiqamiz.

To’g’ri aniqlangan sinf obyektini butun dasturiy modul sifatida ishlatish mumkin. Haqiqiy sinfning barcha ichki ishlari yashirin bo’lishi lozim. To’g’ri aniqlangan sinfning foydalanuvchilari uning qanday ishlashini bilishi shart emas, ular sinf qanday vazifani bajarishini bilsalar etarlidir.

Sinf elementini e’lon qilishda bir nechta kalit so’zlardan foydalaniladi: public, private, protected.

Umumiy (public) komponentalar dasturni ixtiyoriy qismida murojaat xuquqiga ega. Ulardan, ixtiyoriy funksiya ushbu sinf ichida va sinf tashqarida foydalansa xam bo’ladi.

Xususiy (private) komponentalar sinf ichida murojaat xuquqiga ega, lekin sinf tashqarisidan esa murojaat kilish mumkin emas. Komponentalardan ushbu ular tavsiflangan sinfdagi funksiya - a’zolari yoki “do’stona”- funksiyalar orqali foydalanish mumkin.

Ximoyalangan (protected) komponentalar sinf ichida va xosila sinflarda murojaat xuquqiga ega.

Ulardan eng muhimlari public (ochiq) va private (yopiq) kalit so’zlari bo’lib, ular orqali obyektning a’zolariga murojaat qilish imkoniyati chegaralanadi.

Sinfning barcha usullari va xossalari boshlang’ich holda yopiq deb e’lon qilinadi. Yopiq a’zolarga faqatgina shu sinfning usullari orqaligina murojaat qilish mumkin. Obyektning ochiq a’zolariga esa dasturdagi barcha funksiyalar murojaat qilishlari mumkin. Sinf a’zolariga murojaat qilish imkonini belgilash juda muhim xususiyat bo’lib, bu masalani yechishda uncha katta tajribaga ega bo’lmagan dasturlarchilar ko’pincha qiyinchiliklarga duch keladilar. Bu holatni batafsilroq tushuntirish uchun mavzuni boshida keltirilgan masalamizga qaytamiz.

Class Mushuk

{

unsigned int itsYosh;

unsigned int itsOgirlik;

void Miyovlash();

}

Bu tarzda sinfni e’lon qilishda itsYosh va itsOgirlik maydonlari ham, Miyovlash() usuli ham yopiq a’zo sifatida aniqlanadi. Dasturda yuqoridagi tartibda Mushuk sinfi e’lon qilingan bo’lsa va bu sinf ekzemplyari bo’lgan obyektning itsYosh a’zosiga main() funksiyasi tanasidan turib murojaat qilsak kompilyator xatolik ro’y berganligi haqida xabar beradi.



Mushuk Baroq;

Baroq.itsYosh = 5 // Xatolik!

// Yopik a’zoga murojaat qilish mumkin emas.

Statik elementlar hamda funksiyalar

Shu paytgacha, har bir yaratilgan element o‘zining xususiy ma’lumotlar elementiga ega bo’lar edi. Lekin, shunday holat bo’ladiki, bitta sinf doirasidagi obyektlarning ba’zi elementlari o‘zaro bog’langan bo’ladi. Masalan, ish vaqti bir xil bo’lgan 1000 ta ishchining oylik maoshini hisoblaydigan dastur tuzish taklif qilinayotgan bo’lsin. Soliq stavkasini aniqlash uchun dastur har bir ishchining sharoitini bilishi kerak. Buning uchun aytaylik, state_of_employee nomli sinfdan foydalanamiz. Agar, ishchilar bir xil sharoitda ishlasa, demak, dastur barcha employee tipidagi obyektlar uchun (barcha ishchilar uchun) ushbu elementlardan o’zaro moslikda foydalanadi. Ushbu holatda dastur, bitta axborotning 999 ta nusxasidan foydalanish bilan xotiradan foydalanish hajmini kamaytiradi.

Sinfning elementidan o’zaro moslikda foydalanish uchun, ushbu element static (statik) deb e’lon qilinishi zarur. Agar, dastur ushbu elementga yangi qiymat o’zlashtirsa, hamma obyekt elementi ushbu yangi qiymatni qabul qiladi. Sinf elementi static deb e’lon qilinganidan so’ng, u umumiy (global) o’zgaruvchi sifatida e’lon qilinishi zarur.

#include //strcpy() uchun

#include //printf() uchun

#include //_getch() uchun

using namespace std;

class book_series

{

public:



book_series(char *, char *, float);

void show_book(void);

void set_pages(int);

private:

static int page_count; //bu umumiy element hisoblanadi

char title[64];

char author[64];

float price;

};

int book_series::page_count; //sinfdan tashqarida umumiy o`zgaruvchini e`lon qilish



void book_series::set_pages(int pages)

{

page_count = pages;



}

book_series::book_series(char *title, char *author, float price) //Sinfning konstruktori

{

strcpy(book_series::title, title); /*string sinfiga ulanish uchun zarur bo`lgan, strcpy() funksiyasi*/



strcpy(book_series::author, author);

book_series::price = price;

}

void book_series:: show_book (void)



{

printf("Sarlavha: %s\n",title);

printf("Muallif:%s\n",author);

printf("Narx: %.2f\n",price);

printf("Sahifalar: %d\n",page_count);

}

void main()



{

book_series programming("Studiing C++", "Author1", 22.95);

//programming obyektini konstruktor yordamida yaratish

book_series word( "Studiing to work with Word for Windows 7", "Author2", 19.95);

//word obyektini konstruktor yordamida yaratish

word.set_pages(256); /*Word obyektining sahifalari soni beriladi, bu programmingga ham ta'sir qiladi*/

programming.show_book ();

word.show_book() ;

programming.set_pages(512); //page_countni o`zgartirish

programming.show_book(); //obyekt ma`lumotlarini ekranga chiqarish

//programming

word.show_book(); //obyekt ma`lumotlarini ekranga chiqarish

//word

_getch();

}

Natijasi:



Obyekt mavjud bo’lmaganda, public static atributli elementlardan foydalanish

Sinfning barcha obyektlarida o’zaro moslikda foydalaniladigan, elementi static sifatida e’lon qilinishi tushinarli bo’ldi, lekin, shunday holat bo’lishi mumkin: hech qanday obyekt yaratilmagan, ammo, ushbu elementdan foydalanish zarur. Dasturda bu elementdan foydalanish uchun, uni public hamda static deb e’lon qilish zarur. Ushbu dasturda huddi shu holatga e’tibor qaratilgan.

Bu holatni ifodalaydiga dasturning kodi quyida ifodalangan:

#include //strcpy() uchun

#include //printf() uchun

#include //_getch() uchun

using namespace std;

class book_series

{

book_series();



public:

static void show_book(void); //funksiyaning statik elementini chop etish uchun, ushbu atribut qo`shiladi

static int page_count;

private:

char title [64];

char author[64];

float price;

};


int book_series::page_count; //O`zgaruvchini global o`zgaruvchi sifatida e'lon qilish

void book_series::show_book (void)

{

printf("Sahifalar soni=%d\n",page_count);



}

void main(void)

{

book_series::page_count = 256; /*o`zgaruvchiga 256 qiymati o`zlashtirilgan*/



book_series::show_book();

_getch();

}

N atija:




  1. Berilgan topshiriqda, himoyalangan elementga qiymat obyektlar yordamida o’zlashtirilsin.

  2. Berilgan topshiriqda, himoyalangan (statik) elementga qiymat obyektsiz o’zlashtirilsin.


Download 11,45 Mb.

Do'stlaringiz bilan baham:
1   ...   11   12   13   14   15   16   17   18   ...   62




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