O‘zbekiston respublikasi oliy va o‘rta maxsus ta’lim vazirligi tоshkеnt dаvlаt iqtisоdiyot universitеti


Download 1.96 Mb.
Pdf ko'rish
bet40/83
Sana08.11.2023
Hajmi1.96 Mb.
#1757524
1   ...   36   37   38   39   40   41   42   43   ...   83
Bog'liq
Obyektga yo`naltirilgan dasturlash tillari

 
7.2 Sinflar do‘stlari 
C++da aniq sinf do‘stlariga bu sinfning xususiy elementlariga murojaat etish 
imkonini beradi. C++ da bitta sinf yoki funksiya ikkinchi sinfga do‘stona sinfligini 
ko‘rsatish uchun friend kalit so‘zidan foydalanish va do‘stona sinf ismini ikkinchi 
sinf tavsifiga kiritish lozim.
Do‘stona funksiya va sinflarni ta’riflash: 
friend  
friend  
Masalan, quyidagi book sinfi librarian sinfini o‘ziga do‘stona sinf deb 
belgilagan:
class book
{ char title [64] ; 
char author[64]; 
char catalog[64]; 
public: 
book (char *, char *, char *); 
void show_book(void); 
friend librarian; 
}; 
Shuning uchun librarian sinf obyektlari book sinfning xususiy elementlariga
nuqta operatoridan foydalangan holda, to‘g‘ridan to‘g‘ri murojaat etishi mumkin: 
class librarian

public: 
void change_catalog(book *, char *); 


64 
char *get_catalog(book); 
}; 
void librarian::change_catalog(book *this_book, char *new_catalog)

strcpy(this_book->catalog, new_catalog); 

char *librarian: :get__catalog(book this_book)
{ static char catalog[64]; 
strcpy(catalog, this_book.catalog); 
return(catalog) ; 

Ko‘rib turganimizdek dastur librarian klassining change_catalog funksiyasiga 
book obyektini adres orqali bermoqda. Bu funksiya klassning book elementini 
o‘zgartirgani uchun, dastur parametrni adres orqali uzatishi va undan so‘ng ushbu 
klass elementiga murojat uchun ko‘rsatkich ishlatmog‘i lozim. Book klassi 
aniqlanishidan friend operatori o‘chirib yuborilsa C++ kompilyatori har gal book 
klassi xususiy ma’lumotlariga murojatda sintaksik xato xaqida xabar chiqaradi. 
7.3. O‘zaro do‘st funksiyalar va sinflar 
Agarda bir nechta sinf funksiyalariga boshqa sinfning xususiy ma’lumotlariga 
murojaat qilish kerak bo‘lsa, u holda C++ do‘stona sinfning faqatgina belgilangan 
funksiyalari xususiy elementlarga murojaat etishiga imkoniyat beradi. Masalan, 
faqatgina change_catalog va get_catalog funksiyalarga book sinfning xususiy 
elementlariga murojaat kerak. Quyida ko‘rsatilgandek, book sinfning ichida faqatgina 
shu funksiyalarda xususiy funksiyalarga murojaat chegarasini qo‘yishi lozim: 
class book

public: 
book(char *, char *, char *); 
void show_book(void); 


65 
friend char *librarian::get_catalog(book); 
friend void librarian: :change_catalog( book *, char *); 
private: 
char title[64]; 
char author[ 64 ]; 
char catalog[64]; 
}; 
Ko‘rib turganimizdek friend operatorlari xususiy elementlarga murojat qiluvchi 
hamma do‘st funksiyalarini to‘liq prototiplarini o‘z ichiga oladi.
Agar dastur bir sinfdan boshqasiga murojaat qilsa va sinflar aniqlanish tartibi 
noto‘g‘ri bo‘lsa sintaksik xatoga duch kelish mumkin. Bizning holda book klassi 
librarian klassida e’lon qilingan funksiyalar prototiplariga murojat qilmoqda. Shuning 
uchun librarian klassi aniqlanishi book klassi aniqlanishidan oldin kelishi kerak, biroq 
librarian klassi book klassiga murojat qilmoqda: 
class librarian

public: 
void change_catalog(book *, char *); 
char *get_catalog(book); 
}; 
book klassi aniqlanishini librarian klassi aniqlanishidan oldini qo‘yib bo‘lmagani 
uchun. C++ book klassini e’lon qilish imkonini beradi va shu bilan u kompilyatorga 
bunday klass borligi xaqida xabar beradi va keyinroq o‘zi ham aniqlanadi. Quyida 
buni qanday amalga oshirish keltirilgan: 
class book; // sinf elon qilinishi 

Download 1.96 Mb.

Do'stlaringiz bilan baham:
1   ...   36   37   38   39   40   41   42   43   ...   83




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