3-Mavzu: Sinflar bilan amallar va Qt muhiti
1. Sinfning statik elementlari va metodlari. this ko’rsatgichi.
2. Sinflarni boshqa sinflardan tashkil topishi.
Oqimli sinflar va ob’ektlar.
3. Qt dasturlash muhiti. Qt dasturlash muhitida sinflar va ob’ektlar yaratish.
1. Sinfning statik elementlari va metodlari. this ko’rsatgichi.
Ma’lumotlar elementidan birgalikda foydalanish. Odatda, ma’lum sinf
ob’ektlari yaratilayotganda, har bir ob’ekt o’z-o’zining ma’lumotlar elementlari
to’plamini oladi. Biroq shunday hollar ham yuzaga keladiki, unda bir xil sinflar
ob’ektlariga bir yoki bir nechta ma’lumotlar elementlaridan (statik ma’lumotlar
elementlaridan) birgalikda foydalanish kerak bo’lib qoladi. Bunday hollarda
ma’lumotlar elementlari umumiy yoki juz’iy deb e’lon qilinadi, keyin esa tur
oldidan, quyida ko’rsatilganidek, static kalit-so’z keladi:
private;
static int shared_value;
Sinf e’lon qilingach, elementni sinfdan tashqaridagi global o’zgaruvchi
sifatida e’lon qilish kerak. Bu quyida shunday ko’rsatilgan:
int class_name::shared_value;
Navbatdagi dastur book_series sinfini aniqlaydi. Bu sinf (seriya)ning barcha
ob’ektlari (kitoblari) uchun bir xilda bo’lgan page_count elementidan birgalikda
foydalanadi. Agar dastur ushbu element qiymatini o’zgartirsa, bu o’zgarish shu
ondayoq barcha sinf ob’ektlarida o’z aksini topadi:
#include
using namespace std;
class book_series
{
public:
book_series(float);
void show_book(void);
void set_pages(int) ;
private:
static int page_count;
float price;
};
int book_series::page_count;
void book_series::set_pages(int pages)
{
page_count = pages;
}
book_series::book_series(float price)
{
book_series::price = price;
}
void book_series:: show_book (void)
{
cout << "Narx: " << price << endl;
cout << "Betlar: " << page_count << endl;
}
int main()
{
book_series programming(213.95);
book_series word(19.95);
word.set_pages(256);
programming.show_book ();
word.show_book() ;
cout << endl << "page_count ning o'zgarishi " << endl;
programming.set_pages(512);
programming.show_book();
word.show_book();
return 0;
}
Ko’rinib turganidek, sinf page_count ni static int sifatida e’lon qiladi. Sinfni
aniqlagandan so’ng, dastur shu vaqtning o’zida page_count elementini global
o’zgaruvchi sifatida e’lon qiladi. Dastur page_count elementini o’zgartirganda,
o’zgarish shu vaqtning o’zidayoq book_series sinfining barcha ob’ektlarida
namoyon bo’ladi.
Agar ob’ektlar mavjud bo’lmasa, public static atributli elementlardan
foydalanish. Sinf elementini statik kabi e’lon qilishda bu element ushbu sinfning
barcha ob’ektlari tomonidan birgalikda qo’llanadi. Biroq shunday vaziyatlar yuz
berishi mumkinki, dastur hali ob’ektni yaratganicha yo’q, ammo u elementdan
foydalanishi kerak. Elementdan foydalanish uchun dastur uni public va static
sifatida e’lon qilishi kerak. Masalan, quyidagi dasturda, hatto book_series sinfidagi
ob’ektlar mavjud bo’lmasa ham, bu sinfning page_count elementidan
foydalaniladi:
#include
using namespace std;
class book_series
{
public:
static int page_count;
private:
float price;
};
int book_series::page_count;
int main()
{
book_series::page_count = 256;
cout << "page_count ning joriy qiymati " << book_series::page_count
<<"ga teng"<
return 0;
}
Bu o’rinda, sinf page_count sinfi elementini public sifatida e’lon qilgani uchun,
hatto agar book_series sinfidagi ob’ektlar mavjud bo’lmasa ham dastur sinfning
ushbu elementiga murojaat qilishi mumkin.
Statik funksiya -elementlardan foydalanish. Avvalgi dastur ma’lumotlar statik
elementlarining qo’llanishini ko’rsatib bergan edi. C++ xuddi shunday usul bilan
statik funksiya-elementlar (usullar)ni aniqlash imkonini beradi. Agar static usul
yaratilayotgan bo’lsa, dastur bunday usulni, hatto uning ob’ektlari yaratilmagan
holda ham chaqirib olishi mumkin. Masalan, agar sinf sinfdan tashqari ma’lumotlar
uchun qo’llanishi mumkin bo’lgan usulga ega bo’lsa, siz bu usulni statik qila
olishingiz mumkin bo’lardi. Funksiyadan foydalanish uchun dastur uni public va
static sifatida e’lon qilishi kerak. Masalan, quyidagi dasturda, hatto book_series
sinfidagi ob’ektlar mavjud bo’lmasa ham, bu sinfning show_count() usulidan
foydalaniladi:
#include
using namespace std;
class book_series
{
public: