X


jaźniona z klasą Demo 1...

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.
Cały program ma postać przedstawiona na wy-
druku 6.1.
Listing 6.5. Dostęp do składowych prywatnyc; funkcje zaprzyjaźnione
1 #i n cl u d e <i o s t r e a m . h>
#include <c o n i o . h>
3
c l a s s Demo_1
{
friend void ustawA ( Demo_1 &, i n t ) ;
5
// f u n k c j a z a p r z y j a z n i o n a
public :
7
Demo_1( ) { a = 0 ; }
void pokaz ( )
const { c ou t << a << e n d l ; }
9
private :
i n t a ;
11
} ;
void ustawA ( Demo_1 &x , i n t i l e )
13
{
x . a = i l e ;
}
15
i n t main ( )
{ Demo_1 zm ;
17
c o u t << "zm . a ␣ po␣ u t w o r z e n i u ␣ o b i e k t u : ␣ " ;
zm . pokaz ( ) ;
19
c o u t << "zm . a ␣ po␣ wywolaniu ␣ f u n k c j i ␣ f r i e n d ␣ustawA : ␣ " ;
ustawA ( zm , 1 0 ) ;
21
zm . pokaz ( ) ;
g e t c h ( ) ;
23
return 0 ;
}
Po uruchomieniu otrzymujemy następujący wynik:
zm . a po u t w o r z e n i u o b i e k t u : 0
zm . a po wywolaniu f u n k c j i friend ustawA : 10
W trakcie wykonywania programu zostaje utworzony obiekt zm i danej a jest
6.2. Funkcja niezależna zaprzyjaźniona z klasą
131
przypisana wartość 0. Następnie wywołana zostaje funkcja zaprzyjaźniona
ustawA() i danej a zostaje przypisana wartość 10. Funkcja składowa pokaz():
void pokaz ( )
const { c ou t << a << e n d l ; }
została zadeklarowana jako const, co oznacza, że nie może ona modyfikować
danych obiektów. Funkcja deklarowana jest jako const zarówno w prototypie
jak i w definicji przez wstawienie słowa kluczowego po liście jej parametrów
i, w przypadku definicji przed nawiasem klamrowym rozpoczynającym ciało
funkcji. Programista może określić, które obiekty wymagają modyfikacji, a
które pod żadnym pozorem nie mogą być zmieniane. Gdy obiekt nie może
być zmieniony, programista może posłużyć się słowem kluczowym const.
Wszystkie próby późniejszej modyfikacji takiego obiektu znajdowane są już
w trakcie kompilacji programu. W kolejnym przykładzie, pokażemy jak napi-
sać niezależną funkcję pokaz(), zaprzyjaźnioną z klasą punkt, wypisującą na
ekranie współrzędne punktu. Deklaracja wyjściowa klasy punkt ma postać:
c l a s s punkt
{
i n t x , y ;
public :
punkt ( i nt xx = 0 , i nt yy = 0)
{ x = xx ;
y = yy ;
}
} ;
Aby mieć dostęp do prywatnych danych klasy punkt, co jest nam potrzebne,
aby wyświetlić współrzędne punktu x i y, musimy dysponować zewnętrzną
funkcją pokaz(), zaprzyjaźnioną z klasą punkt. Argumenty do tej funkcji
muszą być przekazane jawnie. Wobec tego prototyp tej funkcji może mieć
postać:
void pokaz ( punkt ) ;
gdy chcemy przekazywać argumenty przez wartość, lub:
void pokaz
( punkt & ) ;
gdy chcemy przekazać argumenty przez referencję. Możemy usprawnić funk-
cję pokaz() wiedząc, że ta funkcja nie zmienia współrzędnych i zastosować
modyfikator const:
void pokaz ( const punkt & ) ;
132
6. Funkcje zaprzyjaźnione
Modyfikacja pierwotnej klasy punkt może mieć postać pokazaną na wydruku
6.6.
Listing 6.6. Dostęp do składowych prywatnych; funkcje zaprzyjaźnione
1
// d e k l a r a c j a k l a s y punkt ,
p l i k p u n k t 1 . h
#i f n d e f _PUNKT1_H
3
#d e f i n e _PUNKT1_H
c l a s s punkt
5
{
i n t x , y ;
public :
7
friend void pokaz ( const punkt & ) ;
punkt ( i nt xx = 0 , i nt yy = 0)
9
{ x = xx ;
y = yy ;
}
11
} ;
#e n d i f
Funkcja służąca do wyświetlenia współrzędnych ma postać:
friend void pokaz ( const punkt &) ;
Funkcja pokaz() jest zaprzyjaźniona z klasą punkt i ma dostęp do prywat-
nych danych x i y. Jeżeli powstanie obiekt klasy punkt o nazwie p to możemy
uzyskać dostęp do jego składowych klasycznie:
p . x
i
p . y
Definicję funkcji pokaz() umieszczamy w oddzielnym pliku (wydruk 6.7).
Listing 6.7. Dostęp do składowych prywatnych; funkcje zaprzyjaźnione
1
// d e f i n i c j a k l a s y p u n k t , p l i k p u n k t 1 . cpp
#include " punkt1 . h"
3 #i n cl u d e <i o s t r e a m . h>
5
void pokaz ( const punkt &p )
{
c o u t << " ␣ w s p o l r z e d n e ␣ punktu : ␣ " << p . x << " ␣ " << p . y
7
Powered by wordpress | Theme: simpletex | © Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.

Drogi użytkowniku!

W trosce o komfort korzystania z naszego serwisu chcemy dostarczać Ci coraz lepsze usługi. By móc to robić prosimy, abyś wyraził zgodę na dopasowanie treści marketingowych do Twoich zachowań w serwisie. Zgoda ta pozwoli nam częściowo finansować rozwój świadczonych usług.

Pamiętaj, że dbamy o Twoją prywatność. Nie zwiększamy zakresu naszych uprawnień bez Twojej zgody. Zadbamy również o bezpieczeństwo Twoich danych. Wyrażoną zgodę możesz cofnąć w każdej chwili.

 Tak, zgadzam się na nadanie mi "cookie" i korzystanie z danych przez Administratora Serwisu i jego partnerów w celu dopasowania treści do moich potrzeb. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

 Tak, zgadzam się na przetwarzanie moich danych osobowych przez Administratora Serwisu i jego partnerów w celu personalizowania wyświetlanych mi reklam i dostosowania do mnie prezentowanych treści marketingowych. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

Wyrażenie powyższych zgód jest dobrowolne i możesz je w dowolnym momencie wycofać poprzez opcję: "Twoje zgody", dostępnej w prawym, dolnym rogu strony lub poprzez usunięcie "cookies" w swojej przeglądarce dla powyżej strony, z tym, że wycofanie zgody nie będzie miało wpływu na zgodność z prawem przetwarzania na podstawie zgody, przed jej wycofaniem.