|
Mustaqil ish mavzu: O’zaro bog’langan sinflarni tashkil etish
| bet | 2/2 | Sana | 08.06.2024 | Hajmi | 22,12 Kb. | | #261746 |
Bog'liq O’zaro bog’langan sinfl11111111Sinf do‘stlari ta’rifi
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 kiritishi lozim.
Do‗stona funksiya va sinflarni ta‘riflash:
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 ob‘yektlari 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 *);
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 sinfining change_catalog funksiyasiga book ob‘yektini adres orqali bermoqda. Bu funksiya sinfning book elementini o‗zgartirgani uchun, dastur parametrni adres orqali uzatishi va undan so‗ng ushbu sinf elementiga murojaat uchun ko‗rsatkich ishlatmog‗i lozim. Book sinf aniqlanishidan friend operatori o‗chirib yuborilsa C++ kompilyatori har gal book sinfi xususiy ma‘lumotlariga murojaatda sintaktik xato haqida xabar chiqaradi.
Do‘stona sinflar sonini chegaralash
Agarda bir nechta sinf funksiyalariga boshqa sinfning xususiy ma‘lumotlariga murojaat qilish kerak bo‗lsa, u holda C++ do‗stona 49 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 sinfining ichida faqatgina shu funksiyalarda xususiy funksiyalarga murojaat chegarasini qo‗yishi lozim:
class book {
public:
book(char *, char *, char *);
void show_book(void);
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 sintaktik xatoga duch kelish mumkin. Bizning holda book sinfi librarian sinfida e‘lon qilingan funksiyalar prototiplariga murojaat qilmoqda. Shuning uchun librarian sinfi aniqlanishi book sinfi aniqlanishidan oldin kelishi kerak, biroq librarian sinfi book sinfiga murojaat qilmoqda:
class librarian {
public:
void change_catalog(book *, char *);
char *get_catalog(book); };
Book sinfi aniqlanishini librarian sinfi aniqlanishidan oldini qo‗yib bo‗lmagani uchun C++ book sinfini e‘lon qilish imkonini beradi va shu bilan u kompilyatorga bunday sinf borligi haqida xabar beradi va 50 keyinroq o‗zi ham aniqlanadi. Quyida buni qanday amalga oshirish keltirilgan:
class book; // sinf ni e‘lon qilinishi.
XULOSA
Xulosa qilib aytganda, Sinf – bu maxsus turlar bo’lib, o’zida maydon, usullar va xossalarni mujassamlashtiradi. Sinf murakkab struktura bo’lib, ma‘lumotlar ta‘riflaridan tashqari, protsedura va funksiyalar ta‘riflarini o’z ichiga oladi.
Sinf ma‘lumotlari maydonlar, protsedura va funksiya usullarI deb ataladi. Keltirilgan misolda TPerson – sinf nomi, fname va faddress – maydonlar nomlari, show – usul nomi.
Maydonlarga murojaat qilish sinf xossalari va usullari yordamida amalga oshiriladi. Sinfga birlashtirilgan protsedura va funksiyalarga usullar deyiladi.
|
| |