942 – 19 guruhi talabasi Zaripboyev Anvar 12 – tajriba ishi (mta)


Download 53.91 Kb.
bet7/9
Sana01.12.2021
Hajmi53.91 Kb.
#178642
1   2   3   4   5   6   7   8   9
Bog'liq
12 - tajriba ishi

Sinf do‘stlari ta’rifi. Sinfning komponentalariga murojaat qilishning yana bir usuli dostona funksiyalardan foydalanishdir. Sinfning dostona funksiyasi deb shu sinfga tegishli bo‘lmagan, lekin shu sinfning himoyalangan komponentlariga murojaat qilish huquqiga ega bo‘lgan funksiyalarga aytiladi. Funksiya dostona bo‘lishi uchun sinf tanasida friend spetsifikatori bilan ta’riflanishi lozim.

Do‘stona funksiyani ta’riflash: friend < funksiya prototipi >

Do‘stona funksiyalardan foydalanish xususiyatlari quyidagilar:

Do‘stona funksiya murojaat qilinganda this ko‘rsatkichiga ega bo‘lmaydi.

Sinf obyektlari dostona funksiyaga parametrlari orqali uzatilishi lozim.

Do‘stona funksiya sinf komponentasi bo‘lmagani uchun unga tanlov amalini qo‘llab bo‘lmaydi:

Sinf obyekt.funksiya nomi va Obyektga_ko‘rsatkich funksiya nomi. Do‘stona funksiyaga murojaat spetsifikatorlari (public, protected, private) qo‘llanmaydi. Do‘stona funksiya prototipining smf usulida joy lashtirilishining farqi yo‘q Do‘stona funksiyalar mexanizmi sinflar orasidagi aloqani soddalashtirisliga imkon beradi. Smflardan berkitilgan komponentalariga murojaat qilish uchungina kiritilgan funksiyalarni of ib tashlash mumkin.

Misol tariqasida «sohadagi nuqta» va «sohadagi chiziq» sinflari uchun dostona funksiyani qarab chiqamiz. Sohadagi nuqta sinflga. (x, y) koordinatalarini aniqlovchi komponentalar kiradi. Sohadagi chiziq sinfining komponentalari chiziqning umumiy tenglamasi A*x + B*y + C = 0 koeffitsiyentlari A, B, C.

Quyidagi dasturda ikkala sinf uchun dostona bo‘lgan nuqtadan chiziqqacha masofani hisoblashga imkon beradigan funksiya kiritilgan.

#include

using namespace std;

class line;

class point

{

float x,y;



public:

point(float xn=0, float yn=0)

{

x=xn;


y=yn;

}

friend float masofa(point, line);



};

class line

{

float A, B, C;



public:

line(float a, float b, float c)

{

A=a;


B=b;

C=c;


}

friend float masofa(point, line);

};

float masofa(point P, line L)



{

return L.A*P.x + L.B*P.y + L.C;

};

int main()



{

point P(16.0, 12.3);

line L(10.0, -42.3, 24.0);

cout << "\n P nuqtasi L chiziqdan cheklanishi:";

cout << masofa(P,L);

return 0;

}
Dastur bajarilishi natijasi

P nuqtasi L chiziqdan cheklanishi: – 336.29009

Bir sinf ikkinchi sinfga dostona bo‘lishi mumkin. Bu holda sinfning hamma komponenta funksiyalari boshqa sinfga dostona bo‘ladi. Do‘stona sinf o‘zga sinf tanasidan tashqari ta’riflangan bo‘lishi lozim.


Download 53.91 Kb.

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




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