Дружні класи або Класи-друзі в це такі класи, які можуть мати доступ до членів класу з модифікаторами "private" і "protected" того класу, в якому вони оголошені як друзі за допомогою ключового слова friend.
Застосування
За допомогою дружніх класів, можна краще організувати інкапсуляцію і розмежувати доступ шляхом дозволу доступу до повного функціоналу класу лише певній частині коду, дозволяючи іншим бачити лише частину його API, в іншому випадку повинно було б відкривати публічний доступ до прихованої частини. Це збільшення інкапсуляції відбувається за рахунок посилення зв'язку між класами.
Приклад
class B { friend class A; // Клас A є другом класу B private: int i; }; class A { public: A(B b) { b.i = 0; // доступ до приватного поля можливий } };
Властивості
- Дружба класів не є симетричною – Якщо клас
A
є другом класуB
, то класB
не є автоматично другом класуA
. - Дружба класів не є транзитивною – Якщо клас
A
є другом класуB
і класB
не є другом класуC
, то класA
не є автоматично другом класуC
. - Друзі не успадковуються – Якщо друг класу
Base
не є автоматично другом класуDerived
і навпаки; так само як і якщоBase
є другом іншого класу,Derived
не буде автоматично другом того класу і навпаки. - Доступ відкритий друзям класу успадковується – Друг класу
Derived
може доступатися до захищених членів класуDerived
, що був успадкований відBase
. Відзначимо однак, що друг класуDerived
матиме лише доступ до членів успадкованих від класуBase
до яких Derived сам має доступ, наприклад, якщоDerived
публічно успадковується відBase
,Derived
лише матиме доступ до захищених (і публічних) членів успадкованих відBase
, але не до приватних членів, і так само і друзі цього класу.
Див. також
Примітки
- . Архів оригіналу за 17 Лютого 2015. Процитовано 4 Лютого 2015.
- . Архів оригіналу за 4 Лютого 2015. Процитовано 4 Лютого 2015.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 4 Лютого 2015. Процитовано 4 Лютого 2015.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title ()
Посилання
- http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr043.htm
- http://www.cplusplus.com/doc/tutorial/inheritance/ [ 4 Лютого 2015 у Wayback Machine.]
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Цю статтю треба для відповідності Вікіпедії. (лютий 2017) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Druzhni klasi abo Klasi druzi v C ce taki klasi yaki mozhut mati dostup do chleniv klasu z modifikatorami private i protected togo klasu v yakomu voni ogolosheni yak druzi za dopomogoyu klyuchovogo slova friend ZastosuvannyaZa dopomogoyu druzhnih klasiv mozhna krashe organizuvati inkapsulyaciyu i rozmezhuvati dostup shlyahom dozvolu dostupu do povnogo funkcionalu klasu lishe pevnij chastini kodu dozvolyayuchi inshim bachiti lishe chastinu jogo API v inshomu vipadku povinno bulo b vidkrivati publichnij dostup do prihovanoyi chastini Ce zbilshennya inkapsulyaciyi vidbuvayetsya za rahunok posilennya zv yazku mizh klasami Prikladclass B friend class A Klas A ye drugom klasu B private int i class A public A B b b i 0 dostup do privatnogo polya mozhlivij VlastivostiDruzhba klasiv ne ye simetrichnoyu Yaksho klas A ye drugom klasu B to klas B ne ye avtomatichno drugom klasu A Druzhba klasiv ne ye tranzitivnoyu Yaksho klas A ye drugom klasu B i klas B ne ye drugom klasu C to klas A ne ye avtomatichno drugom klasu C Druzi ne uspadkovuyutsya Yaksho drug klasu Base ne ye avtomatichno drugom klasu Derived i navpaki tak samo yak i yaksho Base ye drugom inshogo klasu Derived ne bude avtomatichno drugom togo klasu i navpaki Dostup vidkritij druzyam klasu uspadkovuyetsya Drug klasu Derived mozhe dostupatisya do zahishenih chleniv klasu Derived sho buv uspadkovanij vid Base Vidznachimo odnak sho drug klasu Derived matime lishe dostup do chleniv uspadkovanih vid klasu Base do yakih Derived sam maye dostup napriklad yaksho Derived publichno uspadkovuyetsya vid Base Derived lishe matime dostup do zahishenih i publichnih chleniv uspadkovanih vid Base ale ne do privatnih chleniv i tak samo i druzi cogo klasu Div takozhPrimitki Arhiv originalu za 17 Lyutogo 2015 Procitovano 4 Lyutogo 2015 Arhiv originalu za 4 Lyutogo 2015 Procitovano 4 Lyutogo 2015 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 4 Lyutogo 2015 Procitovano 4 Lyutogo 2015 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Posilannyahttp publib boulder ibm com infocenter comphelp v8v101 index jsp topic 2Fcom ibm xlcpp8a doc 2Flanguage 2Fref 2Fcplr043 htm http www cplusplus com doc tutorial inheritance 4 Lyutogo 2015 u Wayback Machine Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti lyutij 2017