Bonjours, je viens d'aller voir sur la FAQ mais je ne trouve pas ce que je veux, je ne comprend pas la réel utiliisation de déclarer quelque chose friend .
Quelqu'un pourrais t-il me l'expliquer ? merci
Bonjours, je viens d'aller voir sur la FAQ mais je ne trouve pas ce que je veux, je ne comprend pas la réel utiliisation de déclarer quelque chose friend .
Quelqu'un pourrais t-il me l'expliquer ? merci
quand tu déclares une fonction ou une classe comme friend d'une classe, cela signifie que tu l'autorise à accèder aux données et méthodes membres de la classe spécifiées comme protected et private, je suis surpris que tu n'ais pas trouvé la réponse dans un tuto ni dans la faq
oui mais si on a que une classe, avec dedans une méthode public déclarée friends ceci sert a quoi exemple
pourquoi ne pas mettre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class point { public : /* Constructeurs */ point(); point(const &); point(float); point(float,float); ~point(); /* Méthodes d'accès */ void CoordonnePoint(float); void CoordonnePoint(float,float); void CoordonnePoint(const point &); friend ostream& operator<< (const &); friend point operator+(const &); private : float *pX; float *py; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class point { public : /* Constructeurs */ point(); point(const &); point(float); point(float,float); ~point(); /* Méthodes d'accès */ void CoordonnePoint(float); void CoordonnePoint(float,float); void CoordonnePoint(const point &); ostream& operator<< (const &); point operator+(const &); private : float *pX; float *py; }
L'opérateur d'injection doit obligatoirement être déclaré friend car s'il fait parti de la classe on devrait faire ça pour afficher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Point<<cout
Salut,
pour ce problème je pense qu'il est encore mieux de faire ceci :
On n'a pas besoin "d'encombrer" la classe point avec une méthode qui peut être extérieure à la classe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class point { public : /* Constructeurs */ ... /* Méthodes d'accès */ void CoordonnePoint(float); void CoordonnePoint(float,float); void CoordonnePoint(const point &); point operator+(const &); private : float *pX; float *py; } ostream& operator<< (ostream & o, const point & );
J'ai l'impression que les fonctions friends ne servent pas à grand chose, si ce n'est qu'a passer au travers de l'encapsulation ; c'est pourquoi je ne les emploie pas. (J'aimerais avoir l'avis de quelques personnes)
Je pense qu'il voudrait savoir à quoi elles servent réelement, ie où on doit les utiliser et pourquoi les utiliser.Envoyé par Swoög
b Oo
Si elle n'est pas friend on ne peut utiliser les données membres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ostream& operator<< (ostream & o, const point & );
On est donc obligé de faire des accesseurs (c'est vrai que normalement ils y sont...) On peut aussi utiliser les fonctions membres privées !
Elles brisent en effet l'encapsulation donc plusieurs solutions :Envoyé par b Oo
- tu recodes les classes dont certaines méthodes private auraient du être protected (c'est long) et tu hérites de ces classes pour en faire ce dont tu as besoin.
- tu passes par une fonction externe déclarée dans aucune classe comme dans ton cas et on n'est plus vraiment dans de l'objet à proprement parlé.
- tu utilises les classes amies qui semble être un bon compromis.
Ca a déjà été discuté : les fonctions amies ne brisent pas l'encapsulation, bien au contraire.
http://c.developpez.com/faq/cpp/?pag..._encapsulation
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager