Darsliklar C++ sinflar / ob’ektlar

C++ C++ sinflar / ob’ektlar

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.