Значајка пријатеља да ли се користи функцијом или класом може произвести негативан утјецај на објектно оријентирани оквир јер слаби енкапсулацију која је против објектно оријентиране парадигме. То је разлог зашто се функција пријатеља мора мудро користити, јер би то могло да разбије скривање података .
Значајка овог пријатеља није ни комутативна нити транситивна . Кс је пријатељ И и не закључује да је И пријатељ Кс-а. Ако је Кс пријатељ И-а и И је пријатељ З-а, не имплицира да је Кс пријатељ З-а.
Цомпарисон Цхарт
Основа за поређење | Фриенд Фунцтион | Фриенд Цласс |
---|---|---|
Басиц | То је функција која се користи са кључном ријечју пријатеља за додјељивање приступа нечлановима приватним члановима класе. | То је класа која се користи са кључном речју пријатеља за приступ приватним члановима друге класе. |
Форвард децларатион | Мора се користити. | Није обавезно. |
Користи | Функција пријатеља може се користити у неким ситуацијама преоптерећења оператера. | Класа пријатеља се може користити када се класа креира на врху друге класе. |
Дефиниција функције пријатеља
Функција пријатеља се користи за приступ приватним и заштићеним члановима класе тако што дозвољава нечланској функцији да добије приступ. У овој врсти функције, кључна ријеч пријатеља се користи прије имена функције у вријеме декларације. Постоје неки рестриктивни услови који се односе на функцију пријатеља. Први услов је да функција пријатеља није наслеђена од стране класе дете. Други услов је да спецификатор класе складишта можда није присутан у функцији пријатеља, што значи да се не може декларисати као статична и екстерна.
Функција пријатеља се не позива са објектом који позива. Примери функције пријатеља су: глобална функција, функција члана класе, шаблон функције може бити функција пријатеља. Хајде да то схватимо уз помоћ примера.
#инцлуде усинг намеспаце стд; цласс фирст {инт дата; публиц: фирст (инт и): дата (и) {} воид дисплеј (цонст фирст & а); }; воид дисплаи (цонст фирст & а) {цоут << "дата =" <Дефиниција класе пријатеља
Слично функцији за пријатеље, можемо направити једну класу да буде пријатељ друге класе која се назива разредом пријатеља . Тако да класа пријатеља може добити приступ приватним члановима дефинисаним унутар друге класе. Важно је запамтити да класа пријатеља може приступити само именима дефинисаним у другој класи уместо наслеђивања друге класе. Тачније, чланови прве класе не могу постати чланови класе пријатеља. Ове класе пријатеља се ретко користе.
Класа пријатеља може бити декларисана у више од једне класе. Сматра се кратком алтернативном методом за функцију пријатеља јер уз помоћ тога можемо креирати класу пријатеља која може приступити цијелим члановима података и функционирати умјесто стварања вишеструких функција пријатеља.
#инцлуде усинг намеспаце стд; цласс Фирст {// Декларација класе пријатеља пријатеља класе Сецонд; публиц: Прво (): а (0) {} воид принт () {цоут << "Резултат је" << а << ендл; } привате: инт а; }; цласс Сецонд {публиц: воид цханге (Прво & ицласс, инт к) {ицласс.а = к; }}; инт маин () // Оутпут Резултат је 0 Резултат је 5Кључне разлике између функције пријатеља и класе пријатеља
- Функција пријатеља је функција која може приступити приватним и заштићеним члановима класе. Насупрот томе, класа пријатеља је класа која помаже у приступу приватним члановима класе.
- Функција пријатеља је декларисана укључивањем прототипа унутар класе, уз помоћ кључне речи пријатељ. Слично томе, класа пријатеља је такође дефинисана помоћу кључне речи пријатељ.
- Прогресна декларација се користи у слуцају да је пријатељица у функцији против, није неопходно користити је у класи пријатеља.
Закључак
Функција пријатеља је потребна када функција треба приступити два или више независних класа, интерних чланова. С друге стране, класа пријатеља је потребна када класа захтева приступ члановима друге класе. Када вишеструка функција треба да буде пријатељ те функције, у том случају је боље користити класу пријатеља.