русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Int frifunc(alpha a,beta b)


Дата додавання: 2014-04-22; переглядів: 893.


{

return a.data+b.data;

}

///////////

int main()

{clrscr();

alpha aa;

beta bb;

cout<<frifunc(aa,bb)<<endl;

bioskey(0);

return 0;

}

Програма 13.8

 

 

В цій програмі ми бачимо два класи – alpha і beta. Конструктори цих класів задають їх єдині елементи даних у вигляді фіксованих значень 3 і 5. Нам необхідно, щоб функція frifunc() мала доступ до тих та інших прихованих даних, тому ми робимо її дружньою функцією. З цією метою всередині кожного класу використане ключове слово friend.

friend int frifunc(alpha,beta);

Це оголошення може бути розміщене де завгодно всередині класу. Немає жодної різниці, запишемо ми його в public- чи private-секцію.

Об’єкт кожного класу передається як параметр функції frifunc(), і функція має доступ до прихованих даних обох класів через ці аргументи. Функція додає значення даних і повертає їх суму.

Нагадаємо, що до класу не можна звертатися до того, як він оголошений в програмі. Оголошення функції frifunc() в класі alpha посилається на клас beta, а, отже, beta повинен бути оголошений до alpha. Звідси означення

class beta;

на початку програми.

Треба відмітити, що ідея дружніх функцій дещо сумнівна. Під час розробки С++ на цю тему велися суперечки і приводилися аргументи проти включення в мову такої можливості. З одного боку, дружні функції підвищують гнучкість мови, з іншого - вони не відповідають принципу обмеження доступу до даних, згідно з яким тільки функції-члени можуть мати доступ до прихованих даних класу.

Наскільки серйозно суперечить єдності концепції використання дружніх функцій? Дружня функція оголошується такою в тому класі, до даних якого вона пізніше й матиме доступ. Таким чином, програміст, що не має доступу до вихідного коду класу, не може зробити функцію дружньою. В цьому сенсі цілісність даних зберігається. Але все одно такі функції можуть призвести до «spaghetti code» (код з надто великою кількістю передач управління), коли численні дружні функції фактично стирають границі між класами. З цієї причини дружні функції повинні бути принаймні розкидані по програмі і зустрічатися як можна рідше.

 


<== попередня лекція | наступна лекція ==>
Дружні функції | Приклад використання дружніх функцій


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн