[C/C++] Klasy zaprzyjaźnione ???

0

Witam !
Dopiero ucze sie programować obiektowo i mam takie małe pytanko .
Zadeklarowałem sobie klasę jako zaprzyjaźnioną i jest ok . Moze ona korzystać z pól prywatnych drugiej klasy . Ale jak zrobić żeby ta klasa która ma dostęp do tych pól prywatnych mogła tylko czytać ich wartości ( dla zmiennych ) nie zmieniając ich wartości . Coś w stylu const dla metod .
Z góry dzięki za pomoc

0

witaj AreekMan.

masz chyba raczej na myśli funkcje zaprzyjaźnione ...

Elementy prywatne są dostępne tylko dla funkcji składowych tej samej klasy oraz fukcji z nią zaprzyjaźnionych.

W gruncie rzeczy jest to bardzo typowy problem.
Jego bardzo typowe rozwiązanie to:

Pola klas niech będą prywatne, a klasy niech będą publiczne.
Niech każde pole ma odpowiadającą mu publiczną funkcję (konwencja nazywania to "get_NazwaPola"). funkcja ta nie pobiera argumentów, a zwraca zawartość pola.

W ten sposób możesz zwiększyć hermetyzację klas, gdyż żaden obiekt z zewnątrz nie jest w stanie zmienić zawartości pól, jednocześnie udostępniasz interfejs przekazujący aktualne wartości.

karpia zjem.
Pozdrawiam

0

Chodzi mi o klasy zaprzyjaźnione , a co do metod publicznych , które wzracają wart pól prywatnych danej klasy (Get_pole , sa nazywane akcesorami ) to już tak robiłem , ale pomyślałem że wygodniej by było , gdyby zrobić tak że klasa jest zaprzyjaźniona w taki sposób , że może czytać dane pola prywatne klasy , która zadeklarowała ją jako zaprzyjaxnioną , ale ich nie zmieniać . Ale chyba sie tak nie da . W każdym razie dzięki za pomoc

Pozdrawiam
ArekMaan

0

Nie jestem pewien, ale spróbuj zainicjalizować funkcje w klasie zaprzyjaźnionej jako const funkcja();
Oczywiście jeżeli te funkcje gdzieś indziej nie zmianiają jakichś danych, ale chyba jak tu nie, to gdzieś indziej też nie....

Pozdrawiam Mart

0

Chodzi mi o klasy zaprzyjaźnione , a co do metod publicznych , które wzracają wart pól prywatnych danej klasy (Get_pole , sa nazywane akcesorami ) to już tak robiłem , ale pomyślałem że wygodniej by było , gdyby zrobić tak że klasa jest zaprzyjaźniona w taki sposób , że może czytać dane pola prywatne klasy , która zadeklarowała ją jako zaprzyjaxnioną , ale ich nie zmieniać.

A po co chcesz tak zrobić?? :-/ Przecież ta druga klasa mogłaby równie dobrze pobierać te wartości przy pomocy publicznych metod, odczytujących prywatne dane z klasy pierwszej. A jeśli chodzi ci o to, by tylko jedna wybrana klasa mogła czytać te wartości, to zrób prywatnymi te funkcje odczytu i otwórz do nich dostęp tylko tej klasie ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1