Klasslar va obektlar. Konstruktorlar va destruktorlar Reja: Obektlar bilan ishlash va klasslar Konstruktor va destruktorlar


Download 16.22 Kb.
Sana29.11.2020
Hajmi16.22 Kb.
#155336
Bog'liq
Document


Klasslar va obektlar. Konstruktorlar va destruktorlar

Reja:

1. Obektlar bilan ishlash va klasslar

2. Konstruktor va destruktorlar

C++ tilida obyektlar bilan ishlash

Har qanday dasturning strukturasi tarmoqlanish va sikllar to’plamining kombinasiyasidan iborat bo’ladi.Obektga mo’ljallangan yondoshuv bir kunda o’ylab topilgan yemas. Uning paydo bo’lishi dasturiy ta’minotning tabiiy rivojidagi navbatdagi pog’ona xolos. Vaqt o’tishi bilan qaysi uslublar ishlash uchun qulay-u, kaysinisi noqulay yekanini aniqlash oson bo’lib bordi. Obektga mo’ljallangan yondoshuv yeng muvaffaqiyatli, vaqt sinovidan o’tgan uslublarni o’zida samarali mujassam yetadi.Ob’yekt - mavhum (abstrakt) mohiyat bo‘lib, u bizni o‘rab turgan haqiqiy olamning tavsiflariga ega. Ob’yektlarni yaratish va ular ustida manipulyatsiyalar olib borish - C++tilining qandaydir alohida imtiyozi emas, balki ob’yektlarning tavsifi va ular ustida o‘tkaziladigan opyeratsiyalarni kodli konstruktsiyalarda o‘zida mujassamlantiradigan dasturlash myetodologiyasi (uslubiyoti) ning natijasidir. Dasturning har bir ob’yekti, har qanday haqiqiy ob’yekt kabi, o‘z atributlari va o‘ziga xos xulq-atvori bilan ajralib turadi. Ob’yektlarni turli katyegoriyalarga ko‘ra tasniflash mumkin: masalan, myening «Cassio» raqamli qo‘l soatim soatlar sinfiga mansub. Soatlarning dasturiy ryealizatsiyasi (ishlatilishi), standart holat sifatida, sizning kompyutyeringizning opyeratsiya tizimi tarkibiga kiradi.C ++ sinflari / ob'ektlari

C ++ - ob'ektga yo'naltirilgan dasturlash tili.

C ++ da hamma narsa atributlari va usullari bilan bir qatorda sinflar va ob'ektlar bilan bog'liq. Masalan: real hayotda mashina ob'ektdir. Mashinada og'irlik va rang kabi atributlar, haydash va tormoz kabi usullar mavjud.Xususiyatlar va usullar asosan sinfga tegishli o'zgaruvchilar va funktsiyalardir. Ular ko'pincha "sinf a'zolari" deb nomlanadi.

Sinf - bu bizning dasturimizda foydalanishimiz mumkin bo'lgan foydalanuvchi tomonidan aniqlangan ma'lumotlar turi va u ob'ektlar konstruktori yoki ob'ektlarni yaratish uchun "loyiha" sifatida ishlaydi.

Sinf yarating

Sinf yaratish uchun class kalit so'zidan foydalaning:

Misol

"MyClass" nomli sinf yarating:



sinf MyClass {// Sinf

public: // Kirish spetsifikatori

int myNum; // Attribute (int o'zgaruvchisi)

string myString; // Xususiyat (satr o'zgaruvchisi)

};

Misol tushuntirildi



Class kalit so'zi MyClass nomli sinf yaratish uchun ishlatiladi.

Ochiq kalit so'z - bu sinf a'zolari (atributlari va usullari) ga sinf tashqarisidan kirish imkoniyatini belgilaydigan kirish spetsifikatori. Kirish spetsifikatorlari haqida keyinroq bilib olasiz.

Sinf ichida myNum butun o'zgaruvchisi va myString mag'lubiyatga o'zgaruvchisi mavjud. O'zgaruvchilar sinf ichida e'lon qilinganda, ular atributlar deb ataladi.

Nihoyat, sinf ta'rifini nuqta-vergul bilan yakunlang;.

Ob'ekt yarating

C ++ da ob'ekt sinfdan yaratiladi. Biz allaqachon MyClass nomli sinfni yaratganmiz, shuning uchun endi undan ob'ektlar yaratish uchun foydalanishimiz mumkin.

MyClass ob'ektini yaratish uchun sinf nomini, so'ngra ob'ekt nomini ko'rsating.

Sinf atributlariga (myNum va myString) kirish uchun ob'ektdagi nuqta sintaksisidan (.) Foydalaning:

Misol

"MyObj" deb nomlangan ob'ekt yarating va atributlarga kiring:



sinf MyClass {// Sinf

public: // Kirish spetsifikatori

int myNum; // Attribute (int o'zgaruvchisi)

string myString; // Xususiyat (satr o'zgaruvchisi)

};

int main () {



MyClass myObj; // MyClass ob'ektini yarating

// Attributlarga kirish va qiymatlarni o'rnatish

myObj.myNum = 15;

myObj.myString = "Ba'zi matnlar";

// Atribut qiymatlarini chop etish

cout << myObj.myNum << "\ n";

cout << myObj.myString;

return 0;

}

Bir nechta ob'ekt



Siz bitta sinfning bir nechta ob'ektlarini yaratishingiz mumkin:

Misol


// Ba'zi atributlar bilan Car sinfini yarating

sinf avtomobili {

jamoat:

string markasi;



mag'lubiyat modeli;

int yil;


};

int main () {

// Avtomobil ob'ektini yarating

CarObj1 avtomashinasi;

carObj1.brand = "BMW";

carObj1.model = "X5";

carObj1.year = 1999;

// Avtomobilning boshqa ob'ektini yarating

CarObj2 avtomashinasi;

carObj2.brand = "Ford";

carObj2.model = "Mustang";

carObj2.year = 1969;

// Atribut qiymatlarini chop etish

cout << carObj1.brand << "" << carObj1.model << "" << carObj1.year << "\ n";

cout << carObj2.brand << "" << carObj2.model << "" << carObj2.year << "\ n";

return 0;

}

Konstruktorlar va dyestruktorlar



Nomlaridan ko‘rinib turganidyek, konstruktor - bu myetod bo‘lib, u o‘z xotirasida ushbu sinf ob’yektini quradi, dyestruktor esa - bu ob’yektni olib tashlaydigan myetod. Konstruktorlar va dyestruktorlar boshqa ob’yektli myetodlardan quyidagi xususiyatlariga ko‘ra afrqlanadi:

 O‘z sinfi nomi bilan bir xil bo‘lgan nomga ega.

 Qaytariladigan qiymatga ega emas.

 Garchi hosila sinf bazaviy sinflarning konstruktorlari va dyestruktorlarini chaqira olsa-da, konstruktor va dyestruktorlarning o‘zlari vorislik qilolmaydi.

 Agar boshqacha e’lon qilinmagan bo‘lsa, kompilyator tomonidan avtomatik tarzda public sifatida gyenyeratsiya qilinadi.

 Sinf ob’yektlarining yaratilishi va yo‘q qilinishini tyegishli tarzda kafolatlash uchun, kompiyaltor tomonidan chaqirib olinadi.

 Agar ob’yekt dinamik xotiraning ajratilishi va yo‘q qilinishini talab qilsa, new va delete opyeratorlariga noaniq murojaatga ega bo‘lishi mumkin.

Quyida konstruktorlar va dyestruktorlar e’lonining umumlashma sintaksisini namoyish qiluvchi misol kyeltiramiz:

class className

{public:


//className ma’lmotlarining boshqa a’zolari; //yashirin className bo‘yicha konstruktor(


className(const className&);//Nusha ko‘chirish konstruktori

//Boshqa konstruktorlar

~className();//Dyestruktor

//Boshqa myetodlar};

Sinf soni chyeklanmagan konstruktorlarga ega bo‘lishi, shu jumladan, konstruktorlarga umuman ega bo‘lmasligi mumkin. Konstruktorlar virtual dyeb e’lon qilinishi mumkin emas. Hamma konstruktorlarni himoyalangan syektsiyaga joylashtirmang hamda, yashirin argumyentlar qiymatidan foydalanib, ularning sonini kamaytirishga intiling.

Ko‘p hollarda sinf ob’yektlarini initsializatsiya qilish (nomlash) ning bir nyechta usullariga ega bo‘lish yaxshi natija byeradi. Bunga bir nyechta konstruktor vositasida erishish mumkin. Masalan:

class date {

int vonth, day, year;

public:

// ...


date(int, int, int); //yilning oyi, kuni

date(char*); //satr ko‘rinishidagi sana

date(int); //bugungi kun, oy, yil

date(); //yashirin sana: bugungisi

};

Ortiqcha yuklangan funktsiyalar qanday qoidalarga amal qilsa, konstruktorlar ham paramyetrlar turlariga nisbatan xuddi shunday qoidalarga amal qiladilar. Agar konstruktorlar o‘z paramtyerlari turlari bo‘yicha ancha-muncha farq qilsa, kompilyator har gal foydalanganda to‘g‘ri paramyetrni tanlab olishi mumkin:



date today(4);

date july4(«1983 yil, 4 iyul»);

date guy(«5 Noy»)

date now; //yashirish initsiallashadi (nomlanadi.)

Konstruktorlarning uch turi mavjud.

 Yashirin konstruktor paramyetrlarga ega emas. Agar sinf bitta ham konstruktorga ega bo‘lmasa, kompilyator avtomatik tarzda bitta yashirin konstruktor yaratadiki, u o‘z sinfiga mansub ob’yektni yaratishda xotirani shunchaki ajratib byeradi.

Date holatida har bir paramyetr uchun «yashirin qabul qilish: today» (bugun) sifatida talqin qilinadigan yashiringan qiymatni byerish mumkin.

class date {

int month, day, year;

public:


// ...

date(int d =0, int m =0, int y =0);

date(char*); // satr vositasida byerilgan sana

};

date::date(int d, int m, int y)



{

day = d ? d : today.day;

month = m ? m : today.month;

year = y ? y : today.year;

// yo‘l qo‘yiladigan sana ekanini tukshirish

// ...


}

 Dalillarga ega konstruktor ob’yektning yaratilish paytida uni initsiallash (nomlash) ga, ya’ni turli funktsiyalarni chaqirib olishga, dinamik xotirani ajratish, o‘zgaruvchilarga dastlabki qiymatlarni byerish va h.k. ga imkon byeradi.

 Nusha ko‘chirish konstruktori byerilgan sinf ob’yektlarini yaratish uchun ma’lumotlarni ushbu sinfning mavjud bo‘lgan boshqa ob’yektidan nusha ko‘chirish yo‘lidan borishga mo‘ljallangan. Bunday konstruktorlar ma’lumotlarning dinamik tuzilmalarini modyellashtiradigan ob’yektlar nushasini yaratishda ayniqsa maqsadga muvofiqdir. Biroq yashirin holda kompilyator yuzaki nushalash konstruktorlari (shallow copy constructors) dyeb ataluvchi faqat ma’lumotlar a’zolaridan nusha oladigan konstruktorlarni yaratadi. SHuning uchun, agar biron-bir ma’lumotlar a’zolari ko‘rsatkichlarga ega bo‘lsa, ma’lumotlarning o‘zidan nusha ko‘chirilmaydi. «CHuqur» nushalashni konstruktor kodiga joriy qilish uchun tyegishli yo‘riqnomalarni kiritish kyerak.

Misol:


class string

{

char *Str;



int size;

public:


string(string&); // nusxa ko‘chirish konstruktorlari

};

string::string(string& right) // dinamik o‘zgaruvchilar va rusurslar



{ // nusxalarini yaratadi

s = new char[right->size];



strcpy(Str,right->Str);

}

Download 16.22 Kb.

Do'stlaringiz bilan baham:




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