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![]()
Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)
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
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Partager