20-AMELIY
.pdf20-ámeliy. Obyektke baǵdarlanǵan programmalastırıw tiykarları. Konstruktor hám destruktor.
Jumıstıń maqseti: Klass obyektiniń "ómirlik ciklın" basqarıwshı arnawlı metodlar - konstruktor hám destruktor menen tereń tanısıw. Obyekt jaratılǵan waqıtta onı durıs baslanǵısh mánisler menen támiyinlewdi (initializaciya) hám obyekt joq etilgende ol iyelegen resurslardı (mısalı, dinamikalıq yad) bosatıwdı úyreniw.
Teoriyalıq maǵlıwmatlar:
Obyektke baǵdarlanǵan programmalastırıwda obyektler jaratıladı, bir qansha waqıt "jasaydı" (jumıs orınlaydı) hám aqırında joq etiledi. Usı process dawamında avtomat túrde shaqırılatuǵın eki arnawlı metod bar:
1. Konstruktor (Constructor):
oWazıypası: Obyekt jaratılǵan waqıtta onıń aǵza-ózgeriwshilerin baslanǵısh mánisler menen támiyinlew. Bul obyekt jaratılıwı menen "isker" jaǵdayda bolıwın kepilleydi.
oÓzgeshelikleri:
Atı hár qashan klass atı menen birdey boladı.
Hesh qanday mánis qaytarmaydı (hátte void te emes).
Obyekt jaratılıwı menen avtomat túrde shaqırıladı.
Bir klass ishinde birneshe konstruktor bolıwı múmkin (parametrleri hár túrli bolsa). Bul konstruktorlardı artıqsha júklew (overloading) dep ataladı.
oTúrleri:
Ádepki boyınsha konstruktor (Default Constructor): Hesh qanday parametr qabıl etpeydi.
Parametrli konstruktor (Parameterized Constructor):
Obyekttiń qásiyetlerine mánis beriw ushın parametrler qabıl etedi.
2.Destruktor (Destructor):
oWazıypası: Obyekt óz jumısın tamamlaǵannan keyin (mısalı, óz kóleminen (scope) shıqqanda), ol iyelegen resurslardı tazalaw. Eń áhmiyetli wazıypası - konstruktorda new operatorı arqalı ajıratılǵan dinamikalıq yadtı delete operatorı arqalı bosatıw. Bul "yadtan sızıp shıǵıw"dıń (memory leak) aldın aladı.
oÓzgeshelikleri:
Atı klass atı menen birdey boladı, biraq aldında tilda (~) belgisi boladı.
Hesh qanday mánis qaytarmaydı hám parametr qabıl etpeydi.
Klass ishinde tek ǵana bir destruktor boladı.
Obyekt joq etiliwinen aldın avtomat túrde shaqırıladı.
Ámeliy bólim:
1-Mısal: Konstruktor hám Destruktordıń islew ciklın baqlaw
Bul mısalda biz Kitap degen klass jaratamız hám obyekt jaratılǵanda konstruktor, joq etilgende destruktor iske túskenin kórsetetuǵın xabarlardı ekranǵa shıǵaramız.
#include <iostream> #include <string>
using namespace std;
class Kitap { private:
string atı; int bet_sanı;
public:
// Parametrli konstruktor
Kitap(string kitap_atı, int beti) { atı = kitap_atı;
bet_sanı = beti;
cout << "'" << atı << "' atlı Kitap obyekti jaratıldı. (Konstruktor isledi)" << endl;
}
// Destruktor ~Kitap() {
cout << "'" << atı << "' atlı Kitap obyekti joq etildi. (Destruktor isledi)" << endl;
}
void showInfo() {
cout << "Kitap atı: " << atı << ", Betler sanı: " << bet_sanı <<
endl;
}
};
int main() {
cout << "--- main funkciyasınıń baslanıwı ---" << endl;
// Birinshi obyekt jaratıldı, konstruktor shaqırıldı
Kitap hobbit("Hobbit", 310); hobbit.showInfo();
{ // Jańa, ishki kólem (scope) jaratamız
cout << "\n--- Ishki kólemniń baslanıwı ---" << endl;
Kitap oz_siyqırshısı("Oz eliniń siyqırshısı", 250); oz_siyqırshısı.showInfo();
cout << "--- Ishki kólemniń tamamlanıwı ---" << endl;
} // Usı jerde 'oz_sıyqırshısı' obyekti joq etiledi hám onıń destruktorı shaqırıladı
cout << "\n--- main funkciyasınıń tamamlanıwı ---" << endl; return 0;
} // main funkciyası tamamlanǵanda 'hobbit' obyekti joq etiledi hám onıń destruktorı shaqırıladı
2-Mısal: Konstruktorlardı artıqsha júklew (Overloading)
Bul mısalda GeometriyalıqFigura klasında eki túrli konstruktor boladı: biri parametrli (úndemew boyınsha), ekinshisi parametrli. Bul bizge obyektlerdi hár túrli usıllar menen jaratıw imkaniyatın beredi.
#include <iostream>
class GeometriyalıqFigura { private:
int eni;
int biyikligi;
public:
// 1. Úndemew boyınsha konstruktor (parametri) GeometriyalıqFigura() {
eni = 1; biyikligi = 1;
cout << "Úndemew boyınsha konstruktor: 1x1 ólshemli figura jaratıldı." << endl;
}
// 2. Parametrli konstruktor
GeometriyalıqFigura(int e, int b) { eni = e;
biyikligi = b;
cout << "Parametrli konstruktor: " << eni << "x" << biyikligi << "
ólshemli figura jaratıldı." << endl;
}
void maydanınKórset() {
cout << "Figuranıń maydanı: " << eni * biyikligi << endl;
}
};
int main() {
// Úndemew boyınsha konstruktor shaqırıladı GeometriyalıqFigura kvadrat; kvadrat.maydanınKórset();
cout << endl;
// Parametrli konstruktor shaqırıladı GeometriyalıqFigura tuwrımúyeshlik(10, 5); tuwrımúyeshlik.maydanınKórset();
return 0;
}
3-Mısal: Destruktordıń dinamikalıq yad ushın áhmiyeti
Bul eń áhmiyetli mısal. Biz MuzıkaToparı klasın jaratamız, onda topar aǵzalarınıń atları dinamikalıq massivte saqlanadı. Konstruktorda new arqalı yad ajıratamız hám destruktorda delete[] arqalı sol yadtı bosatamız.
#include <iostream> #include <string>
using namespace std;
class MuzıkaToparı {
private:
string atı;
string* agzalar; // Aǵzalar dizimi ushın kórsetkish (pointer) int agzalar_sanı;
public:
// Konstruktor: at, aǵzalar sanın aladı hám olar ushın yad ajıratadı MuzıkaToparı(string topar_atı, int san) {
atı = topar_atı; agzalar_sanı = san;
// Dinamikalıq yad ajıratıw
agzalar = new string[agzalar_sanı];
cout << "'" << atı << "' toparı ushın " << agzalar_sanı << " aǵzaǵa yad ajıratıldı." << endl;
}
// Destruktor: Ajıratılǵan yadtı bosatıw ushın! ~MuzıkaToparı() {
cout << "'" << atı << "' toparı obyekti joq etilmekte... "; // Dinamikalıq ajıratılǵan yadtı bosatıw
delete[] agzalar;
cout << "Yad tabıslı bosatıldı!" << endl;
}
};
int main() {
//Konstruktor 'new' operatorın qollanadı MuzıkaToparı queen("Queen", 4);
//Eger destruktor bolmaǵanda, programma pitken soń
//'agzalar' massivi ushın ajıratılǵan yad
//bosatılmay, "yadtan sızıp shıǵıw" (memory leak) júz berer edi.
return 0; // Usı jerde 'queen' obyekti ushın destruktor shaqırıladı
}
Ámeliy tapsırmalar:
1.BankEsabı klası: iyesiniń_atı (string) hám balans (double) degen qásiyetleri bar BankEsabı klasın jaratıń. Parametrli konstruktor arqalı esap iyesin hám baslanǵısh balansın belgileń. Destruktor bolsa "Esap jabıldı." degen xabardı shıǵarsın. main funkciyasında bir obyekt jaratıp, onıń islew ciklın baqlań.
2.Film klası (Konstruktorlardı artıqsha júklew): atı (string) hám jılı (int) degen qásiyetleri bar Film klasın jaratıń. Tómendegi eki konstruktordı dúziń: o Tek ǵana filmniń atın parametr etip alatuǵın (jılın 0 ge teńlestirsin).
o Filmniń atın da, shıqqan jılın da parametr etip alatuǵın. main funkciyasında hár bir konstruktor ushın bólek-bólek obyekt jaratıp kórsetiń.
3.StudentDizimi klası (Dinamikalıq yad): Bir gruppadaǵı studentlerdiń bahaların saqlaytuǵın StudentDizimi klasın jaratıń. Klass gruppa_nomeri (string) hám bahalar (int* tipindegi kórsetkish) degen qásiyetlerge iye bolsın.
oKonstruktorda gruppa nomerin hám studentler sanın parametr etip alıń, hám studentler sanına teń ólshemdegi pútin sanlı massiv ushın new int[...] arqalı dinamikalıq yad ajıratıń.
o Destruktorda delete[] járdeminde sol ajıratılǵan yadtı bosatıń. Bul tapsırma destruktordıń yad basqarıwdaǵı áhmiyetin túsiniwge járdem beredi.
