logo

Sinflar bilan amallar va Qt muhiti

Загружено в:

08.08.2023

Скачано:

0

Размер:

2643.4423828125 KB
Mavzu:  Sinflar bilan amallar va Qt muhiti
Reja:
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 <iostream>
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 <iostream>
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"<<endl;
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 <iostream>
using namespace std;
class book_series
{
public:
static int show_count() { return page_count;};
private:
float price;
static int page_count;
};
int book_series::page_count = 256;
int main()
{
cout << "page_count ning joriy qiymati " << book_series::show_count()
<<"ga teng"<< endl;
return 0;
}
This ko’rsatkichi.
Agarda konkret ob’ektga ishlov berish uchun sinf a’zosi –funksiya 
chaqirilsa, unda shu funksiyaga ob’ektga belgilangan ko’rsatkich avtomatik va  ko’rsatilmagan holda uzatiladi. Bu ko’rsatqich this ismiga ega va x*  this  kabi har 
bir funksiya uchun ko’rsatilmagan holda belgilanadi.
Masalan x sinfni ekvivalent ko’rinishda shunday tavsiflash mumkin:
class x {
int m;
public:
int readm() { return this->m; }
};
A’zolarga murojaat etishda  this  dan foydalanish ortiqcha. Asosan this 
bevosita ko’rsatkichlar bilan manipulyasiya qilish uchun a’zo funksiyalarini 
yaratilishida foydalaniladi.
#include <iostream>
using namespace std;
class Pair
{
int N;
double x;
friend Pair& operator ++(Pair&);
friend Pair& operator ++(Pair&, int);
public:
Pair (int n, double xn)
{ N= n; x = xn;
}
void display ()
{
cout<<"\n Koordinatalar: N = "<<N<<"\tx = "<<x;
}
Pair& operator --()
{
N/ = 10; x/ = 10; return*this;
}
Pair& operator --(int k)
{
N/ = 2;
x/ = 2.0;
return*this;
}
};
Pair& operator ++(Pair& P)
{
P.N* = 10; P.x* = 10;
return P;
}
Pair& operator ++(Pair& P, int k)
{
P.N = P.N*2+k;
P.x = P.x*2+k;
return P;
}
int main ()
{
Pair Z(10,20.0);
Z.display();++Z;
Z.display();--Z;
Z.display();Z++;
Z.display();Z--;
Z.display();
return 0;
} 2. Sinflarni boshqa sinflardan tashkil topishi. Oqimli sinflar va ob’ektlar.
Obyekt   maydon   sifatida.   Murakkab   sinflarni   hosil   qilishda   oldin   uni   tashkil
etuvchi   oddiyroq   sinflarni   e’lon   qilib,   keyin   esa   ularni   birlashtirish   orqali   sinfni
hosil   qilish   maqsadga   muvofiqdir.   Masalan,   g’ildirak   sinfi,   motor   sinfi,   uzatish
korobkasi sinfi va boshqa sinflarni hosil qilib, keyin esa ularni birlashtirish orqali
avtomobil sinfini qurish oldimizga turgan masalani yechishni ancha osonlashtiradi.
To’g’ri to’rtburchak chiziqlardan tashkil topgan. Chiziq esa ikki nuqta orqali
aniqlanadi.   Har   bir   nuqta   x   va   u   koordinatalar   yordamida   aniqlanadi.   Quyidagi
dasturda   to’rtburchak   sinfi   ko’rsatilgan.   To’g’ri   to’rtburchak   diagonal   bo’yicha
ikki nuqta va ikki tomon yordamida aniqlanadi.
Shuning   uchun   oldin   har   bir   nuqtaning   x,   u   koordinatalarini   saqlash   uchun
nuqta
sinfi e’lon qilingan.Nuqta va to’g’rito’rtburchakning e’lon qilinishi
#include <iostream>
using namespace std;
class Point
{
public:
Point(int x1 = 0,int y1 = 0)
{ x= x1;y = y1;
}
int GetX() const {return x;}
int GetY() const {return y;}
private:
int x;int y;
};
class Rectangle
{
public:
Rectangle(int x1,int y1,int x2,int y2): p1(x1,y1),p2(x2,y2)
{ a= x2-x1;
b = y2-y1;
};
Rectangle(Point a1,Point a2):p1(a1),p2(a2)
{ a= a2.GetX() - a1.GetX();
b = a2.GetY() - a1.GetY();
};
int Per() { return 2*(a+b); }
int Sq() {return a*b; }
private:
Point p1,p2;
int a,b;
};
int main()
{
Rectangle X(10, 20, 50, 80);
cout << "Perimetr = "<<X.Per()<<endl;
cout << "Yuza = "<<X.Sq()<<endl;
cout<<endl;
Point a(2,4);Point b(5,6);
Rectangle Y(a,b);
cout << "Perimetr = "<<Y.Per()<<endl;
cout<<"Yuza = "<<Y.Sq();
return 0;
} Natija:
Perimetr = 200
Yuza = 2400
Perimetr = 10
Yuza = 6 Lokal   sinflar.   Sinf   blok   ichida,   masalan   funksiya   tomonida   tariflanishi
mumkin. Bunday sinf lokal sinf deb ataladi. Lokal sinf komponentalariga shu
sinf tariflangan blok yoki funksiya tashqarisida murojaat qilish mumkin emas.
Lokal
sinf   statik   komponentlarga   ega  bo’lishi   mumkin   emas.   Lokal   sinf   ichida  shu   sinf
aniqlangan   soniga   tegishli   nomlari;   statik   (static)   o’zgaruvchilar;   tashqi   (extern)
o’zgaruvchilar   va   tashqi   funksiyalardan   foydalanish   mumkin.   Avtomatik   xotira
turiga   tegishli   o’zgaruvchilardan   foydalanish   mumkin   emas.   Lokal   sinflar
komponent funksiyalari faqat joylashinuvchi (inline) funksiya bo’lishi mumkin.
Quyidagi   misolda   moddiy   nuqta   sinfi   yaratilib,   uning   ichida   nuqta   sinfiga
ta’rif berilgan va nuqta sinfi ob’ekti maydon sifatida kelgan:
#include <iostream>
using namespace std;
class FPoint
{
public:
//Nuqta sinfi
class Point
{
public:
Point(int x1 = 0,int y1 = 0)
{ x= x1;y = y1;
}
int GetX() const {return x;}
int GetY() const {return y;}
private:
int x;int y;
};
FPoint(int x1,int y1,double w1):p(x1,y1),w(w1){};
void show() {
cout<<"koordinata x = "<<p.GetX()<<endl;
cout<<"koordinata y = "<<p.GetY()<<endl;
cout<<"massa w = "<<w;
}
private:
Point p;
double w;
};
int main()
{
cout<<"fizik nuqta"<<endl;
FPoint X(1, 2, 5.5);
X.show();
cout<<"\n\noddiy nuqta"<<endl;
FPoint::Point Y(2,3);
cout<<"koordinata x = "<<Y.GetX()<<endl;
cout<<"koordinata y = "<<Y.GetY()<<endl;
return 0;
}
Natija:
fizik nuqta
koordinata x = 1
koordinata y = 2
massa w = 5.5
oddiy nuqta
koordinata x = 2
koordinata y = 3
Oddiy   nuqta   sinfi   moddiy   nuqta   sinfining   umumiy   seksiyasiga
joylashtirilgan.Dasturda   moddiy   nuqta   sinfi   ob’ektidan   tashqari   nuqta   sinfi ob’ekti   ham   yaratilgan.   Lekin   bu   sinf   nomi   oldida   moddiy   nuqta   nomi   va
kvalifikasiya operatori joylashtirilgan.
Keyingi   misolimizda   nuqta   sinfi   ta’rifi   moddiy   nuqta   sinfining   xususiy
elementlari seksiyasiga joylashtirilgan:
#include <iostream>
using namespace std;
class FPoint
{
public:
FPoint(int x1,int y1,double w1):p(x1,y1),w(w1){};
void show()
{
cout<<"koordinata x = "<<p.x<<endl;
cout<<"koordinata y = "<<p.y<<endl;
cout<<"massa w = "<<w;
}
private:
//Nuqta sinfi
class Point
{
public:
Point(int x1 = 0,int y1 = 0)
{ x= x1;y = y1;
}
int x;int y;
};
Point p;
double w;
};
int main() {
cout<<"fizik nuqta"<<endl;
FPoint X(1, 2, 5.5);
X.show();
int kk;cin>>kk;
return 0;
} Natija:
fizik nuqta
koordinata x = 1
koordinata y = 2
massa w = 5.5
Bu misolda nuqta sinfi hamma elementlari umumiy, lekin dasturda bu 
sinfdan foydalanib bo’lmaydi.
Oqimli sinflar va ob’ektlar
Oldindan belgilangan ob’ektlar va oqimlar. C++da kiritish-chiqarish 
oqimlarining sinflari mavjud bo’lib, ular kiritish-chiqarish standart kutubxonasi 
(stdio.h) ning ob’ektga mo’ljallangan ekvivalenti (stream.h) dir. Ular quyidagicha: Standart oqimlar (istream, ostream, iostream) terminal bilan ishlash uchun
xizmat qiladi.
Satrli   oqimlar   (istrstream,   ostrstream,   strstream)   xotirada   joylashtirilgan
satrli
buferlardan kiritish-chiqarish uchun xizmat qiladi.
Faylli oqimlar (ifstream, ofstream, fstream ) fayllar bilan ishlash uchun
xizmat qiladi.
Quyidagi   ob’ekt-oqimlar   dasturda   main   funksiyasini   chaqirish   oldidan   avvaldan
aniqlangan va ochilgan bo’ladi:
extern istream cin; //Klaviaturadan kiritish standart oqimi
extern ostream cout; //Ekranga chiqarish standart oqimi
extern ostream cerr; //Xatolar haqidagi xabarlarni chiqarish standart oqimi
(ekran)
extern ostream cerr: //Xatolar haqidagi xabarlarni chiqarishning
buferlashtirilgan standart oqimi. Bu  ob’ektlar   joylashgan  faylda  kiritish-chiqarish   operasiyalar   ta’riflari  ham
berilgandir.   Birinchi   operasiya   >>   «o’ngga»   surish   amali,   orqali   belgilanib
oqimdan   o’qish   deb   ataladi.Ikkinchi   operasiya   <<   «chapga»   surish   amali   orqali
belgilanib   oqimga   chiqarish   yoki   yozish   amali   deb   ataladi.   Oqimga   o’qish   va
yozish   amallari   <<   va   >>   amallarini   qo’shimcha   yuklash   orqali   hosil   qilingan
bo’lib,   chap   operasiya   iostream   va   ostream   sinfi   ob’ekti   bo’lsa   o’ng   o’zgaruvchi
yoki   ifodadir.   Bu   o’zgaruvchi,   konstanta   yoki   ifoda   turi   char,   unsigiod   short,
signed   short,   signed   int,unsigned   int,   signed   long,   unsigned   long,   flout,   double,
long double, char, void bo’lishi mumkin. Shuni aytish kerakki char turidan tashqari
hamma ko’rsatkichlar
void turiga keltiriladi.
Oqim bilan almashish funksiyalari. Oqimga qo’shish << va oqimdan o’qish
>> amallardan tashqari, kirish –chiqish bibliotekalarida qo’shishga foydali 
funksiyalar mavjud. Ma’lumotlarni chiqarishda ostream sinfi ishlatiladi. Bu sinfda
quyidagi chiqarish funksiyalari mavjud.
ostream & put (char cc );
ostream & write (const signed char *array,int u);
ostream & write (const nn signed char *array,int u);
put() funksiya chiquvchi oqimga bitta simvol joylaydi:
cout .put (‘Z’);
write() – funksiyasi ikki parametrga ega
array –xotira qismiga ko’rsatkich va n- simvollar soni.
Chiqarish uchun put funksiyasidan foydalanishga misol:
#include <iostream>
using namespace std;
int main()
{cout.put('a').put('b').put('c').put('\n');
return 0;}
Natija
abc Satr chiqarish uchun write funksiyasidan foydalanishga misol:
#include <iostream>
using namespace std;
int main() {
char ss [] = "merci";
cout.write (ss,sizeof (ss)-1);
return 0;
}
Natija
merci
3. Qt dasturlash muhiti. Qt dasturlash muhitida sinflar va ob’ektlar yaratish.
Qt   kutubxonasini   yaratish   bo’yicha     ish   1990   yilda   Xavard   Nord   (Trolltech
bosh   direktori)   va   Erik   Chambeng   (Trolltech   prezidenti)   tomonidan   boshlandi.
1993 yilga kelib ular birinchi grafik yadroni ishlab chiqishni yakunladilar va vizual
qismlarni yaratishni boshladilar.
1994   yil   4   martda   ular   keyinchalik   "Troll   Tech",   keyin   esa   "Trolltech"   ga
aylantirilgan "Quasar Technologies" deb nomlangan kompaniyani ro'yxatga olishdi
va   Qt   kutubxonasining   birinchi   namoyishi   1995   yil   may   oyida   bo'lib   o'tdi.
Keyinchalik   Qtda   Windows   va   Unix-da   ishlay   oladigan   va   ishlab   chiquvchilarga
bitta API (Application Interface)da ishlash imkoniyati yaratildi. Kutubxona ikkita
litsenziya   asosida   chiqarildi:   tijorat   dasturlarini   ishlab   chiqish   uchun   tijorat   va
ochiq   kodli dasturiy ta'minotni ishlab chiqish uchun. Bozorni kirish sekin kechdi,
ammo   kutubxona   izdoshlari   soni   barqaror   o'sdi.   Yildan   yilga   kompaniya   har   yili
sotuvlar   sonini   ikki   baravar   oshirdi.   Muvaffaqiyat   kutubxonaning   yuqori   sifati,
tarkibiy   qismlarining   nozik,   puxta   o'ylangan   tuzilishi   va   ulardan   foydalanish
qulayligi bilan ta'minlandi.
O'n   yildan   kamroq   vaqt   ichida   Qt   rivojlanib,   kichik   bir   kutubxonadan   butun
dunyo   bo'ylab   minglab   va   minglab   dasturchilar   foydalanadigan   dasturiy mahsulotgacha   o’zgardi.   Qt   dasturi   rivojlanishining   eng   mashhur   namunalari
sifatida unda yaratilgan Skype kommunikatori, VLC media pleyeri, Google Earth
kabi   dastularni   misol   keltirish   mumkin.Tolltech   hozirda   Qt   kutubxonasiga   ega
bo'lgan   taniqli   Nokia   kompaniyasi   bilan   birlashdi.   Shu   munosabat   bilan
kutubxonadan   Nokia   uyali   telefonlari   -   Symbian   va   Windows   Mobile   operatsion
tizimiga ilovalar yaratish uchun foydalanish xam mumkin.
Qt   -   bu   C++   sinflari   kutubxonasi   va   ko'p   platformali   grafik   interfeysli
dasturlarini yaratish uchun asboblar to'plamidir. Windows 95/98 / Me / 2000 / XP /
Vista   /   Windows   7,   Mac   OS   X,   Linux,   Solaris,   HPUX   va   boshqa   Unix
versiyalarida   ishlay   oladigan   dasturlarni   yaratishga   imkon   beradi.   Qt   sinf
kutubxonasi quyidagilarni o'z ichiga oladi:
• Foydalanuvchilarga oynali grafik interfeys qurilishini ta'minlovchi sinflar;
• 2 va 3 o'lchovli grafika bilan ishlash uchun sinflar;
•   rasmlarni   saqlash   uchun     asosiy   grafik   formatlarini   qo'llab-quvvatlovchi
sinflar;
•   Dinamik   massivlar   va   boshqa   strukturaviy   ma'lumotlarning   sinflari
shablonlari;
• Jarayonlar va oqimlar bilan ishlash uchun sinflar;
• XML bilan ishlash uchun sinflar va boshqalar.
Qt kutubxonasi C ++ tilida mavjud bo'lmagan asboblardan foydalanadi, ularni
amalga   oshirish   uchun   qo'shimcha   pre-protsessor   -   meta-ob'ekt   kompilyatorini
(MOC)   ishlatilishi   kerak   bo’ladi.   Shuning   uchun,   Qt   sinflaridan   foydalanadigan
dastur C ++ preprosessor  va kompilyatorga o'tishidan oldin, uni MOC tomonidan
qayta ishlashi kerak.
Kutubxona ishlab chiquvchilari Qt sinf kutubxonasidan foydalangan holda 
dasturlarni yaratish uchun bir nechta texnologiyalarni taqdim etadilar.
Hammasi bo'lib ular uchta variantni qo'llab-quvvatlaydi:
• har qanday matn muharrirlarida maxsus muhitlarsiz dastur fayllarini yaratish
va   ularni   kompilyatsiya   qilish,   yig’ish,   ishga   tushirish   va   operatsion   tizimning
buyruq satri rejimida "qo'lda" otladka qilish; • Microsoft Visual Studio muhitida (2008 yil versiyasidan boshlab) "Windows
uchun"   dasturini   yaratish,   qo'lda   yaratiladigan   versiyasida   bo'lgani   kabi
interfeysning   vizual   tuzish   imkoniyati   qo'llab-quvvatlanmaydi,   ammo   Visual
Studio matn tahrirlovchisida ishlash imkoniyati va dasturlarni otladka qilish uchun
o'rnatilgan otladka muhitidan foydalanish imkoniyati;
•   Ixtisoslashgan   to'liq   platformali   Qt   Creator   ko'p   platformali   muhitda   dastur
yaratish,   eng   keng   tarqalgan   operatsion   tizimlar   uchun   dasturlarni   yaratish
jarayonini to'liq ta'minlaydi: Windows XP / Vista / Windows 7, Mac OS X, Linux,
Solaris,   HP-UX  va   boshqa  Unix  versiyalari.Har   xil   variantlarning  kombinatsiyasi
ham qo'llab-quvvatlanadi. Shunday qilib, kompaniya Qt Creator muhitidan alohida
holda   amaliy   interfeyslarni   vizual   yaratish   uchun   vosita   -   Qt   Designerni   taqdim
etadi.   Ushbu   vositadan   dasturiy   muhitlardan   tashqarida   ham   va   loyihani   Visual
Studioga uzatishdan oldin tayyorgarlik bosqichida xam foydalanish mumkin.
Qt ni o'rnatish va sozlash.
        Qt   freymvorkini   va   vositalarini   onlayn   yoki   oflayn   o'rnatuvchidan
foydalanib o'rnatish mumkin.
        Oflayn   o'rnatish   uchun   tanlangan   operatsion   tizim   uchun
https://www.qt.io/offline-installers   saytidan   dastur   o'rnatuvchisining   tegishli
versiyasini yuklab olishingiz kerak(1-rasm).
       O'rnatish faylini yuklab olgandan so'ng, bajariladigan faylni ishga tushirish
va   keyingi   ko'rsatmalarga   amal   qilish   kerak.   Qt-ni   o'rnatish   uchun   administrator
foydalanuvchisi xuquqlari kerak. 1-rasm.Qt yuklab olish sahifasi
Oflayn o'rnatuvchi - bu tanlangan platformaga xos bo'lgan barcha Qt fayllari va
qo'shimchalarni o'z ichiga olgan alohida to'plam. O'rnatish paytida tijorat versiyasi
foydalanuvchilari   o'zlarining   Qt   saytidagi   kabinetlari(avvalda   ro’yxatdan   o’tish
talab   etiladi)   yoki   Qt   litsenziyalari   kalitlari   bilan   tizimga   kirishlari   mumkin.
Litsenziya kaliti Qt saytidagi foydalanuvchi kabinetlarida mavjud.
              O'rnatuvchini   ishga   tushirish   uchun   sizga   Qt   saytida   ro’yxatdan   o’tish
kerak.   Qt-ning   bu   akkaunt   ma'lumotlaridan   tizimiga   kirish   va   Qt-ning   barcha
ma'lumotlarini,   shu   jumladan   forum   va   vikilaridan   foudalanish   uchun   ishlatish
mumkin.  Agar   sizda   Qt   akkaunti   bo'lmasa,   uni   o'rnatish   jarayonida   yaratishingiz,
ro’yxatdan o’tishingiz mumkin(2-rasm). 2-rasm.Qt saytidan ro’yxatdan o’tish sahifasi.
O'rnatishni   tugatish   uchun   siz   o'rnatmoqchi   bo'lgan   joy   va   tarkibiy   qismlarni
tanlang va o'rnatuvchining ko'rsatmalariga rioya qiling(3-rasm).                             3-rasm.Qtni o’rnatish oynalari
Onlayn   o'rnatuvchida   ( https://www.qt.io/download )   siz   o'rnatishingiz   mumkin
bo'lgan tijorat yoki ochiq manbali, bepul Qt versiyasini, vositalarni va qo'shimcha
dasturlarni   tanlashingiz   mumkin.   Onlayn   o'rnatuvchidan   foydalanish   uchun   Qt
foydalanuvchi   kabinetiga   kirish   kerak.   O'rnatuvchi   foydalanuvchi   kabinetida
biriktirilgan   litsenziyani   serverdan   oladi   va   litsenziyaga   mos   keladigan   tarkibiy
qismlar ro'yxatini taqdim etadi.
Qt-ni   yuklab   olish   sahifasida   onlayn   o'rnatuvchini   olish   mumkin(4-rasm).
Onlayn   o'rnatuvchini   yuklab   olgandan   so'ng,   ushbu   o'rnatuvchini   ishga
tushirishingiz kerak.
4-rasm.Qtni yuklab olish sahifasi
Onlayn o'rnatuvchini yuklab olgach uni ishga tushirish kerak(5-rasm).
5-rasm. Onlayn o'rnatuvchi
Quyidagi oynalarda dasturni o’rnatish qadamlar taqdim etiladi(6- a,b,c,d 
rasmlar): a)
b)
c)                                                            d)
6-rasm.Dasturni o’rnatish oynalari.
QT Creator-ni sozlash
1.   QT   Creator-ni   ishga   tushiring.   O'rnatishdan   so'ng   muhitning   ishlashini
tekshirish   kerak.   Quyidagi   menyuga   o'ting:   Инструменты   →   Параметры   →
Комплекты.
Komplekt-loyihani   tuzish   va   yig'ish   uchun   dasturlar   to'plami.   Turli   xil
komplektlarni   yaratish,   ularning   vazifalari   uchun   turli   xil   vositalarni   tanlash
mumkin:   kompilyator,   otladchik,   yig'ish   tizimi   va   boshqalar(7-rasm).   Desktopni
tanlang   (bu   standart   to'plam).   Agar   to'plam   belgisi   yonida   undov   belgisi   bo'lsa,
unda bu to'plamda xatolar mavjudligini anglatadi. Oynaning pastki qismida ushbu
to'plamning sozlamalari paydo bo'ladi, ularni sozlash,tuzatish mumkin. 7-rasm.Komplekt bo’limi
К орень   образа   bo’limiga   "/"   yoki   "C:\"   (Windows-da)   yozuvlarini   kiriting.
Fayl tizimidagi nomni belgilashingiz mumkin (lekin bu zarur emas).
2.   Qt   profillari   yorlig'iga   o'ting.   Odatda   Profil   avtomatik   ravishda   aniqlanadi
(8-rasm).
8-rasm.
Agar   Profil   yo'q   bo'lsa,   unda   qmake-qt5   manzilini   qidirish   kerak.   Agar   a
avtomatik   ravishda   aniqlansa   xam,   ammo   xato   bilan   aniqlansa   " Обзор /Ko'rish" tugmachasini   bosing   va   kerakli   katalogni   tanlang   (qmake-qt5   o'rniga   avtomatik
ravishda qmake-qt5.sh aniqlanishi mumkin, ammo bu noto'g'ri).
3. В меню Параметры (слева) найдите «Сборка и запуск».   Создайте (или
укажите   где   она   находится   кнопкой   «Обзор»)   папку   проектов,
наприме:/ home / andrew / QT _ projects . Нажмите кнопку «ОК» для сохранения и
выхода.   Если   вы   сделали   все   правильно,   то   все   предупреждения   должны
исчезнуть   (если   же   нет,   то   подведите   курсор   к   предупреждающей   иконке   и
выясните, что нужно ещё исправить).
3.   Параметры     menyusida   ( chapda )   "Сборка   и   запуск"   bo ’ limini   toping (9-
rasm ).   Loyiha   papkasini   yarating   (yoki   " Обзор /Ko'rish"   tugmachasi   bilan   qaerda
ekanligini aniqlang), masalan: / home / Andrew / QT_projects. Saqlash va chiqish
uchun "OK" tugmasini bosing. Agar siz hamma narsani to'g'ri bajargan bo'lsangiz,
unda   barcha   ogohlantirishlar   yo'qolishi   kerak   (agar   bo'lmasa,   kursorni
ogohlantirish belgisiga olib boring va yana nimani tuzatish kerakligini bilib oling).
9-rasm.
4. Dastur menyusida    Справка   →   О   модулях   bo’limiga o'ting. Odatiy bo'lib,
Qt   Creator   juda   aniq   Clang   kod   analizatoridan   foydalanadi.   Ammo   Clangning
tahlillari   shunchalik   diqqatliki,   u   loyiha   yaratishda   mukammal   talablar
darajasigacha   boradi.   O'z-o'zidan,   xatolarni   aniqlash   uchun   kodni   tahlil   qilish
kerak, ammo bu qadar emas. Biz boshqa analizatordan foydalanamiz. Modullar bu erda   sozlangan.   O'chirish:   C   ++   ->   ClangCodeModel   va   Code   Analyzer   ->
ClangTools. Ulash: C ++ → Beautifier va Code Analyzer → Cppcheck(10-rasm).
10-rasm.
Interfeysni sozlash
1. Sozlamalar oynasi ochiladi: Инструменты→ Параметры. «Среда» bo'limidan
dasturning   tashqi   ko'rinishini   o'zgartirish   mumkin.   Masalan,   quyuq   mavzuni
tanlashingiz   mumkin:   Dark:   Тема→Dark   (IDE-ni   qayta   ishga   tushirishni   talab
qiladi).   «Системное»   yorlig'ida   terminalni   o'zgartirish   mumkin.   KDE   muhitining
terminalini tanlang – Konsole(11-rasm). 11- rasm .
2. «Текстовый редактор»  bo ' limiga   o ' ting .  Shrift va ranglar bo’limida:  Шрифт → 
Размер  ... qulay shrift o'lchamini tanlang - 14-18 pt. Redaktor rang sxemasini 
tanlang (qayta yoqilmasdan o'zgaradi)(12-rasm).
12-rasm.
Sinfni   C   ++-da   yaratish   Java   yoki   C   #   -ga   qaraganda   biroz   murakkabroq.
Barcha qiyinchilik C ++ tilidagi sinflar ikkita fayldan iborat bo'lishidadir: sarlavha
va joriy fayl. Sarlavha fayllari sinf o'zgaruvchilarini va kirish modifikatorlari bilan
sinfning tuzilishini saqlaydi. Joriy fayl sinf uchun barcha kodlarni amalga oshiradi va   barcha   ma'lumotlarni   to'ldiradi.   Aslida,   sarlavha   fayli   bu   o'zgaruvchini
(maydonlarini)   tuzilishi   va   deklaratsiyasini   ajratish   uchun,   va   barchasi   kodni
yozishni   qulaylashtirish   uchun   yaratilgan.   Ushbu   ikkita   faylning   nomlari   bir   xil
bo'lishi  kerak, faqat  ularning kengaytmalari farq qiladi. Sarlavha faylida bu   .h   va
manba faylida (amalga oshirish)  .cpp.
Xususiyatlar va metodlar.
Xususiyatlar,   ob'ektga   yo'naltirilgan   dasturlash   paradigmasida   har   qanday
qiymatni saqlaydigan bloklar, aslida bu oddiy o'zgaruvchilar.
Metodlar   -   bu   sinfda   muayyan   xatti-harakatlarni   bajaradigan,   masalan,
hisoblarni bajarish va sinf xususiyatlarini to'ldiruvchi kod qismlari.
Masalan,   "shaxs"   sinfida   xususiyatlar   uning   ismi,   familiyasi,   tug'ilgan
sanasi,   bo'yi,   vazni   va   shunga   o'xshash   narsalar   bo'ladi.   Metodlar   esa   piyoda
yurish, yugurish, aqliy faoliyat va hokazo.Bu C ++ kodidagi kabi ko'rinadi.
class people
{ public:
    double height;
    QDate date_birsdate;
    QString first_name;
    QString second_name;
    int mass;
    void Run();
    void Walking();
    void Thinking();
};
Qt Creatorda sinf yaratish
Oldin mavjud loyihadan yangi sinf qo'shishning ikki yo'li mavjud: Birinchisi
quyidagicha:
1)   Fayl   menyusida   «Новый   файл   или   проект»   bandini   tanlang   yoki   shunchaki
Ctrl+N tugmalar birikmasini bosing. 2)   Ochilgan   oynada   « Файлы   и   классы »   bo'limidan   "C   ++"   bandini   tanlang   va
shunga mos ravishda o'zgartirilgan o'ng tomonda « Класс   С ++» elementini tanlang.
3) «Выбрать . . . » tugmachasini bosing(13-rasm).
13-rasm.
4) «Имя класса» maydoniga sinf nomini kiriting, shuningdek asosiy sinf va sinf 
turini tanlash mumkin. Sarlavha va boshlang'ich(joriy) fayl nomi, shuningdek 
fayllar joylashadigan joy o'zi yaratiladi. Shundan so'ng siz «Далее» tugmasini 
bosishingiz kerak(14-rasm). 14-rasm.
5)   Agar   bir   vaqtda   bir   nechta   loyihalar   ochilgan   bo'lsa,   unda   yangi   sinfni
qo'shmoqchi   bo'lgan   aniq   loyihani   tanlashingiz   mumkin.   Shundan   so'ng   siz
«Завершить»   tugmasi   bosiladi.   Shundan   so'ng,   sinf   avtomatik   ravishda   loyihaga
qo'shiladi(15-rasm).
15-rasm.
Sinf qo'shishning ikkinchi usuli yanada murakkab va sarlavha va joriy fayllarni
alohida-alohida qo'shib, keyin ularni bir-biriga bog'lashdan iborat. Ushbu fayllarni
sinf yaratishdan oldin qo'shish mumkin, ammo ularni bir-biriga ulash uchun ushbu
fayllarning tuzilishini tushunish kerak.
class1.h fayli tuzilishi quyidagicha:
#ifndef CLASS1_H
#define CLASS1_H
class class1
{
public:
    class1();
};
#endif // CLASS1_H
Kompilyator direktivalari #ifndef CLASS1_H
#define CLASS1_H
#endif // CLASS1_H
#Include   "class1.h"   bitta   loyihada   bir   necha   marta   chaqirilganda,   u   faqat   bir
marta   bajarilishini   ta'minlaydi   va   kompilyator   boshqa   ko'rsatmalarga   umuman
e'tibor bermaydi.
class class1
class kalit so'zi sinfning nomi e'lon qilinishini anglatadi va class1 - bu sinfning
nomi. Figurali qavslar sinfning xususiyatlari va usullari kabi sinfning o'zi haqidagi
ma'lumotlar aks etadi.
public:
bu   satr   xususiyatlar   va   usullarga   kirish   modifikatorini,   ya'ni   u   erda   yozilgan
barcha ma'lumotlardan tashqari barcha jarayonlar uchun ochiq ekanligini anglatadi.
class1();
Ushbu sinfdan ob'ekt yaratilganda chaqiriladigan funktsiyani bildiradi. Bunday
funktsiya   sinf   konstruktori   deb   nomlanadi   va   aslida   ob'ektning   o'zi   va   ob'ektning
maydonchalari   uchun   dastlabki   ma'lumotlarni   yaratish   bo'yicha   ko'rsatmalarni   o'z
ichiga   oladi.   Konstruktor   oldiga   biron   bir   kalit   so'z   qo'ymang,   chunki   u   hech
narsani   qaytarib   bermaydi,   shuningdek,   konstruktorning   nomi   u   joylashgan
sinfning nomi bilan mos kelishini yodda tutish kerak.
Ikkinchi fayl bu class1.cpp manba fayli:
#include "class1.h" 
class1 :: class1 ()
{
}
Sarlavha fayli manba kodi fayliga faqat bitta kompilyator ko'rsatmasi  #include
"class1.h"  yordamida ulangan. 
class1 :: class1 ()
{
} Ushbu yozuv  class1 sinfi   orqali class1() konstruktorga murojaat qilish imkonini
beradi.Figurali qavslar ichida sinf konstruktorining kodi mavjud.            Foydalanilgan ea dabiyotlar ro’yxati
1. Sh.A.Nazirov, R.V.Qobulov, M.R.Babajanov «C va C++ TILI»
2. Informatika fanidan o’quv qo’llanma //TATU 489 b. Toshkent, 2012.
3. C / C ++.   Программирование   на   языке   высокого   уровня   /   Т.   А.
Павловская. — СПб.:Питер, 2003. —461 с: ил.
4. Программирование на языке С++ в среде  Qt   Creator :
5. / Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк,О. В. Чеснокова,
6. А. С. Чмыхало — М. :  ALT   Linux , 2015. — 448 с.
7. Жасмин   Бланшет,   Марк   Саммерфилд   Qt   4:Программирование   GUI   на
C ++
8. М.Шлее,  Qt  5.10. Профессиональное программирование на С++. - СПб.:
БХВ-Петербург, 2018. - 1072 с.

Mavzu: Sinflar bilan amallar va Qt muhiti Reja: 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 <iostream> 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 <iostream> 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"<<endl; 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 <iostream> using namespace std; class book_series { public: static int show_count() { return page_count;}; private: float price; static int page_count; }; int book_series::page_count = 256; int main() { cout << "page_count ning joriy qiymati " << book_series::show_count() <<"ga teng"<< endl; return 0; } This ko’rsatkichi. Agarda konkret ob’ektga ishlov berish uchun sinf a’zosi –funksiya chaqirilsa, unda shu funksiyaga ob’ektga belgilangan ko’rsatkich avtomatik va