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
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
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
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
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 ;).