3-Mavzu: Sinflar bilan amallar va Qt muhiti Sinfning statik elementlari va metodlari this



Download 1,49 Mb.
Pdf ko'rish
bet2/9
Sana31.12.2021
Hajmi1,49 Mb.
#279736
1   2   3   4   5   6   7   8   9
Bog'liq
3-maruza Programmalash amaliy mat

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  

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 = "<



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  

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 = "<

cout << "Yuza = "<

cout<

Point a(2,4);Point b(5,6); 

Rectangle Y(a,b); 

cout << "Perimetr = "<

cout<<"Yuza = "<

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  

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 = "<


cout<<"koordinata y = "<


cout<<"massa w = "<



private: 

Point p; 

double w; 

}; 

int main() 



cout<<"fizik nuqta"<

FPoint X(1, 2, 5.5); 

X.show(); 

cout<<"\n\noddiy nuqta"<

FPoint::Point Y(2,3); 

cout<<"koordinata x = "<

cout<<"koordinata y = "<

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  

using namespace std; 

class FPoint 



public: 

FPoint(int x1,int y1,double w1):p(x1,y1),w(w1){}; 

void show() 



cout<<"koordinata x = "<


cout<<"koordinata y = "<


cout<<"massa 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"<



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  

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  

using namespace std; 

int main() { 

char ss [] = "merci"; 

cout.write (ss,sizeof (ss)-1); 

return 0; 

Natija 


merci 


Download 1,49 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish