Sinflar va obyektlar — OOP ning amaliy poydevori. O’tgan darsda ular bilan qisqacha tanishdik; endi sinf tuzilishini, uning a’zolarini va obyekt yaratish jarayonini batafsil ko’rib chiqamiz. Sinfni yaxshi tushunsangiz, keyingi barcha OOP tushunchalari osonlashadi.
Sinf (class) — obyektlar yaratish uchun andoza. U obyektning ma’lumotlarini (atributlar/maydonlar) va xatti-harakatlarini (metodlar) bir joyda ta’riflaydi. Obyekt — shu andozadan yaratilgan aniq nusxa.
Sinf tuzilishi
Sinf ichida maydonlar (ma’lumot) va metodlar (funksiyalar) bo’ladi. Keling, Mahsulot sinfini quramiz:
#include <iostream>
#include <string>
using namespace std;
class Mahsulot {
public:
string nomi;
int narxi;
void korsat() {
cout << nomi << " — " << narxi << " so'm" << endl;
}
};
int main() {
Mahsulot telefon;
telefon.nomi = "iPhone";
telefon.narxi = 12000000;
telefon.korsat();
return 0;
}
iPhone — 12000000 so'm
Bu yerda nomi va narxi — maydonlar, korsat() — metod. Metod sinf ichidagi funksiya bo’lib, obyektning o’z maydonlariga bevosita murojaat qila oladi.
public va private
Sinf a’zolari kirish darajasiga ega. public — hamma joydan, private — faqat sinf ichidan ko’rinadi. Ularni jadvalda ko’ramiz:
| Belgi | Kimga ko’rinadi | Standart |
|---|---|---|
public |
hamma joydan | struct uchun |
private |
faqat sinf ichidan | class uchun |
Amalda:
#include <iostream>
using namespace std;
class Hisob {
private:
int balans = 1000; // tashqaridan yashirin
public:
int korish() {
return balans; // sinf ichidan ko'rinadi
}
};
int main() {
Hisob h;
cout << "Balans: " << h.korish() << endl;
// cout << h.balans; // XATO: private
return 0;
}
Balans: 1000
balans private bo’lgani uchun unga to’g’ridan-to’g’ri (h.balans) murojaat qilib bo’lmaydi — faqat public metod (korish) orqali. Bu ma’lumotni himoyalashning asosi.
Metodni sinfdan tashqarida ta’riflash
Katta sinflarda metod tanasini sinfdan tashqariga chiqarish mumkin. Buning uchun :: (ko’lam operatori) ishlatiladi:
#include <iostream>
#include <string>
using namespace std;
class Salom {
public:
void aytish(); // faqat e'lon
};
void Salom::aytish() { // ta'rifi tashqarida
cout << "Salom, UzbekDevs!" << endl;
}
int main() {
Salom s;
s.aytish();
return 0;
}
Salom, UzbekDevs!
Salom::aytish yozuvi “Salom sinfiga tegishli aytish metodi” degani. Bu usul sinf e’lonini toza saqlab, ta’riflarni alohida joyga ajratishga imkon beradi.
Xulosa
Bu bo’limda sinf tuzilishi (maydon va metodlar), obyekt yaratish, public/private kirish darajalari va metodni :: bilan tashqarida ta’riflashni ko’rib chiqdik. Sinf — ma’lumot va xatti-harakatni jamlovchi birlik. Keyingi darsda metodlarga — obyektning xatti-harakatiga chuqurroq kirib boramiz.