10-ma’ruza. Boshqa sinflarni o’z ichiga olgan sinflar. Lokal sinflar Obyekt maydon sifatida


Download 377.65 Kb.
Pdf ko'rish
Sana28.12.2022
Hajmi377.65 Kb.
#1015941
Bog'liq
10-ma’ruza. Boshqa sinflarni o’z ichiga olgan sinflar. Lokal sinflar (1)



10-ma’ruza. 
Boshqa sinflarni o’z ichiga olgan sinflar. Lokal sinflar
 
 
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 muvofiq. 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. 
Boshqa sinflarni o‘z ichiga olgan sinflar. Ba'zi sinflar a'zo 
o‘zgaruvchilari sifatida boshqa sinflarni o‘z ichiga olishi mumkin. Jimlik 
bo’yicha, tashqi sinf yaratishda a'zo o‘zgaruvchilar uchun standart 
konstruktorlar chaqiriladi. Bu konstruktor tanasi bajarilishidan oldin sodir 
bo‘ladi. Buni quyidagicha ko‘rsatish mumkin: 
#include  
using namespace std; 
class A 

public: 
A() 

cout << "A\n"; 

}; 
class B 

private: 
A m_a; // B a'zo o‘zgaruvchi sifatida A ni o‘z ichiga oladi 
public: 
B() 

cout << "B\n"; 

}; 
int main() 

B b; 


return 0; 

Dasturni bajarish natijasi: 


B o‘zgaruvchisi yaratilganda, B() konstruktori chaqiriladi. Konstruktor 
tanasi bajarilishidan oldin m_a A sinfining standart konstruktorini chaqirib 
initsializatsiyalanadi. Bu A qiymatini beradi, keyin boshqaruv B 
konstruktoriga qaytadi va B konstruktorining tanasi bajarila boshlaydi. 
Bu yerda hammasi mantiqiy jihatdan to’g’ri, chunki B() konstruktori 
m_a o‘zgaruvchisini ishlatishni xohlashi mumkin, shuning uchun avval m_a 
ni initsializatsiyalash kerak. 
Ikkinchi misolni ko‘rib chiqamiz. To‘g‘ri to‘rtburchak chiziqlardan 
tashkil topgan. Chiziq esa ikki nuqta orqali aniqlanadi. Har bir nuqta x va y 
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 va y 
koordinatalarini saqlash uchun nuqta sinfi e’lon qilingan (-listing). 
Nuqta (Point) va to‘g‘ri to‘rtburchak (Rectanglening e’lon qilinishi 
#include  
using namespace std; 
class Point 

public: 
Point(int xl=0, int yl=0) 

x = xl; y=yl; 

int GetX() const {return x;} 
int GetY() const {return y;} 
private: 
int x; 
int y; 
}; 
class Rectangle 

public: 


Rectangle(int xl, int yl, int x2, int y2): 
p1(xl, yl), p2(x2, y2) 

a=x2-xl; 
b=y2-yl; 
}; 
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; 

Dastur natijasi: 
Perimetr=200 
Yuza = 2400 
Perimetr= 10 
Yuza = 6 
2. Lokal sinflar 
Sinf blok ichida, masalan, funksiya tomonida tarifilanishi 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. auto xotira turiga tegishli o‘zgaruvchilardan 
foydalanish mumkin emas. Lokal sinflar komponent funksiyalari faqat 
joylashuvchi (inline) funksiya bo‘lishi mumkin. 
Quyidagi misol(-listing)da moddiy nuqta sinfi yaratilib, uning ichida 
Point sinfiga ta’rif berilgan va Point sinfi obyekt maydoni 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; 
}; 
private: 
Point p; 
double w; 
FPoint(int x1, int y1, double w1):p(x1, y1), w(wl){}; 
void show(){ 
cout<<"koordinata x = "<
cout<<"koordinata y= "<
cout<<"massa *="<


}; 
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 sinfining hamma elementlari umumiy, lekin dasturda 
bu sinfdan foydalanib bo‘lmaydi. 
 

Download 377.65 Kb.

Do'stlaringiz bilan baham:




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