|
Sinf ob'ekti .Funktsiya nomi va ob’ektga_kursatkich-funktsiya nomi
|
bet | 75/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmuiSinf ob'ekti .Funktsiya nomi va ob’ektga_kursatkich-funktsiya nomi.
Do’stona funkiyaga murojaat spetsifikatorlari (public, protected, private) qo’llanmaydi. Do’stona funktsiya prototipining sinf usulida joylashtirilishi farqi yo’q. Do’stona funktsiyalar mehanizmi sinflar orasidagi aloqani soddalashtirishga imkon beradi. Sinflardan berkitilgan kompanentalariga murojaat qilish uchungina kiritilgan funktsiyalarni olib tashlash mumkin.
Misol tariqasida “sohadagi nuqta” va “sohadagi chiziq” sinflari uchun do’stona funktsiyani qarab chiqamiz. Sohadi nuqta sinfiga, (h,u) koordinatalarini aniqlovchi kompanentalar kiradi. Sohadagi chiziq sinfining kompanentalari chiziqning umumiy tenglamasi A*h+V*u+S=0 tenglamasi koeffitsentlari A,V,S. Qo’yidagi dasturda ikkala sinf uchun do’stona bo’lgan nuqtadan chiziqqacha masofani hisoblashga imkon beradigan funktsiya kiritilgan.
# include
cla11 line 2 ;
cla11 point 2
{ float x,y ;
public :
point 2 (float xn=0, float yn=0)
{ x=xn; y=yn; }
friend float uclou (point, line 2);
}
cla11 line 2
float A,B,C;
public:
line 2 (float a, float b,float c)
{A=a; B=b; C=c;}
friend float uclou (point 2, line 2);
}
float uclou (point 2 p, line 2 1)
{return 1.A-P.x+1.B*P.y+1.c;)
void main (void)
{ point 2 P(16.0,0.12,12.3);
line 2 h (10.0,-42.3,24.0);
cout << “\n Uklonenie tochik R ot pryamoy L: “;
cout << uclon (P,L);
}
Dastur bajarilishi natijasi
R nuqtadan L chiziqqacha masofa: -336.29009
Bir sinf ikkinchi sinfga do’stona bo’lishi mumkin. Bu holda sinfning hamma komponenta funktsiyalari boshqa sinfga do’stona bo’ladi. Do’stona sinf o’zga sinf tanasidan tashqari ta'riflangan bo’lishi lozim. Masalan:
Cla11 X 2 { friend clarr X1;… };
Cla11 X 1 {…
Void f1 (…);
Void f2 (…);
…
};
Bu misolda f1 va f2 funktsiyalar X2 sinfiga do’stonadir. Sinflar orasidagi do’stlikka misol tariqasida “N-o’lchovli fazodagi nuqta”-Point N va unga do’stona bo’lgan “Nuqta radiusi vektori”-olctorN sinflarini ko’rib chiqamiz. Sinf hamma kompanentalari-o’lchovi N point va koordinatalar massivi X[Point] hususiydir, va shuning uchun ularga do’stona funktsiya orqali murojat qilish mumkin.
Point N sinfi konstruktori koordinatalari massivi berilgan parametrlar qiymatlari bilan initsializatsiya qiladi. Vector N sinf konstruktor “vektor”ob'ektini Point N sinfining ikki ob'ekti buyicha aniqlaydi. Point N sinfi ob'ektlari vektorning boshi va ohirini aniqlaydilar. Bu vektor koordinatalar boshiga keltiriladi. Konstruktordan tashqari vector N sinfiga vektor normasini hisoblovchi funktsiya kiritilgan. Vektor normasi nuqtalarining koordinatalari yigindisidir. Dasturda ikki ulchovli ikki nuqtasi bo’yicha vektor hosil qilingan va so’ngra har hil o’lchovli ikki nuqtadan vektor hosil qilishga harakat qilingan.
# include < io 1t ream.h >
# include < stdlib.h >
cla11 Point N
int N point;
double*x;
friend cla11 vectorn N;
public:
Point N (int n, donble d=0. 0)
{ N point : : point N (int n, double d)
{ N point=n;
x=new double [ N point ];
for (int I=0; Ix [I]=d;
}
cla11 vector N
double* x0;
int N vector;
public;
vector N (point N, point N);
double norm, ( );
}
vector N: : vector N (pointN beg, point.N end)
{ ij (beg. N point!=end. N point)
{ cerr << “\n nukta ulchovida hato “)
exit (1)
}
N vector=beg. N point;
Xv=nev double [N vector];
For ( int I=0; IXv [I]=end. x[I]-beg.DC [I]
}
double vector N: : norm ( )
{double dd=0.0
for (int I=0; Illf=xv[I]*xv[I];
return dd;
}
void main (void)
{ point N A (2,4,0);
point N B (2,2.0);
vectorn V (a,b)
count < c “\n Vektor normasi : “<< v. Norm ( );
point N X(3,2.0)
vectorn J (A,X);
}
Dastur natijasi:
Vektor normasi 8
Nuqta o’lchovida hato!
|
| |