Urganch 2022 Mavzu: O’zaro bog’langan sinflarni tashkil etish.
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);
64 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