ALTE DOCUMENTE
|
|||||||||
O functie este prietena cu o clasa daca are acces la datele membru private ale acelei clase. O functie prietena poate fi o functie globala sau chiar o functie membru a altei clase.
O clasa este prietena cu o alta clasa daca ea are acces la datele membru ale acesteia.
O functie, respectiv o clasa prietena se declara utilizand cuvantul friend astfel:
a) friend Tip_functie Nume_functie Lista_parametri_formali Functie friend globala
b) friend Tip_functie Nume clasa Nume_functie Lista_par._formali Functie friend membru
c) friend Nume clasa Clasa friend
Urmatorul exemplu, nu este corect, deoarece elementul C.y nu este accesibil:
// Functie friend membru
# include <math.h> #include <iostream.h>
class Punct
Punct (float x0, float y0)
class Cerc
int TaieOx() inaccesibil
};
void main ()
// secret world
O solutie pentru a rezolva aceasta problema, ar putea fi declararea functiei membru TaieOx ca functie prietena a clasei Punct. Aceasta modificare nu este suficienta deoarece clasa Cerc nu a fost inca (deja!) definita, deci aceasta trebuie mai intai declarata, iar pentru ca aceasta refera clasa Punct vom declara (pur si) simplu clasa Punct pentru a putea referi centrul cercului ca pointer la Punct. Pentru ca y nu este data membru pentru cerc, functia TaieOx nu poate fi definita imediat, ci doar ulterior, dupa declararea completa a clasei Punct.
Functie friend membru
# include <math.h> #include <iostream.h>
class Punct;
class Cerc
int TaieOx();
};
class Punct
Punct (float x0, float y0)
friend int Cerc::TaieOx();
};
int Cerc::TaieOx()
void main ()
Exemple:
Functie globala friend
# include <dos.h>
# include <conio.h>
# include <graphics.h>
# include <iostream.h>
# define Cale 'c:BorlandCBgi'
class Grafic
~Grafic( )
};
class Punct
Punct (Punct& P)
void Muta ()
void Trag ()
~Punct ()
friend Punct Mijloc(Punct,Punct); // Functii globale
friend Punct Afin (Punct,Punct,float); friend
};
Punct Mijloc (Punct A, Punct B)
Punct Afin (Punct A, Punct B,float t)
class Segment
Segment (Punct P, Punct Q)
Segment (Segment& AB)
~Segment ()
Punct Mijlocs () Mijloc
Punct Afins (float t) Mijloc
void main (void)
delete AB; delete A; delete B; getche();
delete BC; delete CA;
Functie membru friend
# include <dos.h>
# include <math.h>
# include <conio.h>
# include <graphics.h>
# include <iostream.h>
# define Cale 'c:BorlandCBgi'
float Sqr (int x)
int Sqrt (float x)
class Grafic
~Grafic( )
};
class Punct;
class Segment
Segment (Punct*,Punct*);
Segment (Segment&);
~Segment ();
Punct Mijloc ();
};
class Punct
Punct (Punct& P)
void Muta ()
void Trag ()
~Punct ()
friend Punct Segment::Mijloc();
};
Segment:: Segment (Punct *P, Punct *Q)
Segment:: Segment (Segment& AB)
Segment::~Segment ( )
Punct Segment::Mijloc()
void main (void)
getche();
delete OX; delete OY; delete O; delete X; delete Y;
Clasa friend
# include <dos.h> # include <math.h> # include <conio.h> # include <graphics.h> # include <iostream.h>
# define Cale 'c:BorlandCBgi'
struct palettetype pal; float Pi=3.1416, Alfa;
class Grafic
~Grafic( )
};
class Punct
Punct (float x0,float y0,int c)
Punct (Punct& P)
void Muta ()
void Trag ()
~Punct ()
friend Segment;
friend Cerc;
friend Triunghi;
};
class Segment
Segment (Punct P, Punct Q
Segment (Segment& AB)
~Segment ()
Punct Mijloc ();
friend Triunghi;
};
Punct Segment::Mijloc ()
class Cerc
Cerc (Punct P, int r0)
Cerc (Cerc& C)
Punct PeCerc(float a)
~Cerc ()
};
class Triunghi
Triunghi (Punct,Punct,Punct);
Triunghi (Triunghi& ABC)
Punct CentruGr()
~Triunghi ()
};
Triunghi::Triunghi(Punct P,Punct Q,Punct R)
void main (void)
|