friend functions c
Сазнајте више о пријатељским функцијама на Ц ++ са примерима.
Ц ++ подржава функцију енкапсулације у којој се подаци групишу заједно са функцијама које на њему раде да би формирали једну целину. Радећи ово Ц ++ осигурава да су подаци доступни само функцијама које на њему раде, а не никоме ван класе.
Ово је једна од препознатљивих карактеристика Ц ++ која чува податке и спречава њихово цурење у спољни свет.
=> Прочитајте серију Еаси Ц ++ Траининг Сериес.
Али у неким апликацијама у реалном времену, понекад бисмо можда желели да приступимо подацима изван приложене јединице. На пример, аутсајдерска класа можда жели да приступи приватним и заштићеним подацима класе Ц ++.
Ц ++ пружа могућност приступа приватним и заштићеним подацима помоћу посебне функције која се назива „пријатељ“ функција или класа, о чему ћемо овде расправљати у овом водичу.
Шта ћете научити:
- Функција пријатеља у Ц ++
- Пример функције пријатеља
- Разред пријатеља
- Предности / недостаци функције пријатеља
- Закључак
- Препоручено читање
Функција пријатеља у Ц ++
Функција пријатеља у језику Ц ++ је функција којој претходи кључна реч „пријатељ“. Када је функција декларисана као пријатељ, тада може приступити приватним и заштићеним подацима чланова класе.
Функција пријатеља декларисана је унутар класе са кључном речи фриенд која претходи, као што је приказано доле.
class className{ …… friend returnType functionName(arg list); };
Као што је горе приказано, функција пријатеља је декларисана унутар класе чијим приватним и заштићеним члановима података треба приступити. Функција се може дефинисати било где у датотеци кода и не морамо користити кључну реч фриенд или резолуцију опсега, оператор.
Треба применити неке тачке приликом примене функција пријатеља у нашем програму:
- Функција пријатеља може се пријавити у приватном или јавном одељењу класе.
- Може се назвати као нормална функција без употребе објекта.
- Функција пријатеља није у оквиру класе којој је пријатељ.
- Функција пријатеља се не позива помоћу објекта класе јер није у опсегу класе.
- Функција пријатеља не може директно приступити приватним и заштићеним подацима чланова класе. Потребно је да користи објект класе, а затим да приступи члановима помоћу оператора тачке.
- Функција пријатеља може бити глобална функција или члан друге класе.
Пример функције пријатеља
Применимо пример програмирања да бисмо боље разумели употребу функције пријатеља.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Излаз:
Површина = 150
У горњем програму имамо узорак класе са приватним члановима дужине и ширине. Имамо јавни конструктор који иницијализује вредности дужине и ширине. Даље, имамо функцију пријатеља „цалцАреа“ која израчунава површину узимајући у обзир дужину и ширину.
Имајте на уму да је цалцАреа функција пријатеља и није део класе. У главној функцији, након креирања објекта узорка класе, прослеђујемо га функцији цалцАреа која израчунава површину и приказује вредност.
Разред пријатеља
Баш као и функције пријатеља, и ми можемо имати час пријатеља. Разред пријатеља може приступити приватним и заштићеним члановима класе којој је пријатељ.
class A{ …… friend class B; }; class B{ …….. };
Као што је приказано горе, класа Б је пријатељ класе А. Дакле, класа Б може приступити приватним и заштићеним члановима класе А.
Али то не значи да класа А може приступити приватним и заштићеним члановима класе Б. Имајте на уму да пријатељство није обострано ако то не учинимо.
Слично томе, пријатељство разреда се не наслеђује. То значи да како је разред Б пријатељ класе А, неће бити пријатељ ни подразреда класе А.
Узмимо пример програмирања за демонстрацију класе пријатеља.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Излаз:
Површина = 150
шта је алфа тестирање са примером
У овом програму имамо два одељења. Класа „Површина“ која израчунава површину користећи параметре дужине и ширине. Имајте на уму да су поља, површина, дужина и ширина приватни чланови класе Ареа.
Следећа класа која се користи је „принтЦласс“ која исписује површину израчунату функцијом цалцАреа у класи Ареа. Како су чланови приватни, принтЦласс морамо учинити пријатељем класе Ареа.
Када је то завршено, у главној функцији креирамо објекат класе Ареа, израчунавамо површину и прослеђујемо објекат функцији принтАреа класе принтЦласс за приказ површине.
Предности / недостаци функције пријатеља
Једна од предности функције пријатеља или класе је што можемо приступити приватним и заштићеним подацима класе. На пример, ако имплементирамо повезану листу, тада класу повезане листе можемо направити као пријатеља класе чворова и приступити њеним подацима јер се повезана листа састоји од чворова.
Стога се у одређеној ситуацији корисно може користити функција пријатеља или класа. Међутим, има и неких недостатака.
Једна од препознатљивих карактеристика Ц ++-а је енкапсулација, тј. Повезивање података и функција које раде на тим подацима заједно, тако да ниједна спољна функција или класа не може да приступи подацима. Али допуштајући пријатељским функцијама или класи приступ приватним члановима друге класе, заправо угрожавамо функцију енкапсулације.
Да бисмо то спречили, требали бисмо бити опрезни при коришћењу функција пријатеља или класе. Требали бисмо осигурати да у нашем програму не користимо превише функција пријатеља и класа које ће тотално угрозити енкапсулацију.
Закључак
Овим је завршен наш водич о функцији пријатеља и часовима на Ц ++.
Читаоци морају бити врло опрезни док користе класе пријатеља и функције, као да то може деловати као благодат за програмера, такође га треба користити опрезно, јер прекомерно коришћење функција пријатеља и класа може угрозити ООП функцију енкапсулације у нашем програму.
У нашем предстојећем упутству детаљно ћемо научити о статичким функцијама у Ц ++-у.
=> Посетите овде да бисте научили Ц ++ из огреботина.
Препоручено читање