monstr класына достас екі функцияның сипатта-
малары берілген.
kill функциясы
hero класының əдісі болып табылады, ал
steal_ammo функциясы ешбір класқа жатпайды. Екі функцияға да параметр
ретінде
monstr класының объектісіне сілтеме беріледі.
class monstr; // Кластың алдын ала анықталуы class hero{ public: void kill(monstr &); ... }; class monstr{ ... friend int steal_ammo(monstr &); friend void hero::kill(monstr &); // hero класы ертерек анықталуы керек }; int steal_ammo(monstr &M) {return --M.ammo;} void hero::kill(monstr &M) { M.health = 0; M.ammo = 0;} Достас функцияларды мүмкіндігінше аз қолдануға тырысу керек, өйткені
олар инкапсуляция қағидасына қайшы келеді (бұзады), осылайша программа-
ны түзетіп жөндеуді жəне өзгертуді қиындатады.
Достас класс Егер кез келген бір кластың барлық əдістері басқа кластың жасырын
өрістерін пайдалануы қажет болса, онда ол класс түгелдей
friend түйінді
сөзінің көмегімен достас класс ретінде жарияланады. Төменде келтірілген мы-
салда
mistress класы hero класына достас болып жарияланған:
class hero{ ... friend class mistress; } class mistress{ ... void f1(); void f2(); }
204
Мысалдағы
fl жəне
f2 функциялары
hero класына достас болып табы-
лады (
friend түйінді сөзі жазылмағанына қарамастан) жəне оның барлық
өрістеріне қол жеткізе алады.
Мұндағы