Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1178 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [VC++]friend class

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++]friend class

n°378025
matt276
Posté le 30-04-2003 à 12:39:50  profilanswer
 

Comment instancier une friend class ?
En fait on m'a fournit un .h où plmusieurs classes sont déclarées à l'interieur même d'une classe en "friend class"
C'est la premiere fois que je vois çà et je vois pas trop comment faire.
 
merci.
 

mood
Publicité
Posté le 30-04-2003 à 12:39:50  profilanswer
 

n°378026
chrisbk
-
Posté le 30-04-2003 à 12:41:15  profilanswer
 

ben le friend ici joue quedalle
 
si par exemple t'as :
 

Code :
  1. class toto
  2. {
  3. public :
  4. class titi
  5. {
  6. }
  7. }


 
et que tu veux instancier titi, tu fais :

Code :
  1. toto:titi monInstance;

n°378031
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 30-04-2003 à 12:43:17  profilanswer
 

friend te permet de déclarer une classe A qui sera autorisée à violer l'encapsulation de la classe B dans laquelle est défini le friend.
 
Une bonne conception permet d'éviter ce genre de magouille.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°378036
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 30-04-2003 à 12:46:49  profilanswer
 

chrisbk a écrit :


 
et que tu veux instancier titi, tu fais :

Code :
  1. toto:titi monInstance;




 
Euh, il a dit "déclaré" pas "implementé"... :heink:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°378042
chrisbk
-
Posté le 30-04-2003 à 12:49:45  profilanswer
 

Tetragrammaton IHVH a écrit :


 
Euh, il a dit "déclaré" pas "implementé"... :heink:  


 

Citation :

Comment instancier une friend class ?
En fait on m'a fournit un .h où plmusieurs classes sont déclarées à l'interieur même d'une classe en "friend class"
C'est la premiere fois que je vois çà et je vois pas trop comment faire.


 
voila ce que j'ai vu, de la j'ai pense qu'il se focalisait sur le friend alors que ce le vrai soucis c t le cote nested
 
roooh et pis ....... :sleep:

n°378316
SoWhatIn22
Posté le 30-04-2003 à 15:14:52  profilanswer
 

Tetragrammaton IHVH a écrit :


Une bonne conception permet d'éviter ce genre de magouille.


 
Juste pour rire, va regarder un jour le bouquin de reference sur les design pattern. Tu va constater par toi même qu'il y en a. Pourtant, c'est justement une bible sur la conception objet cet ouvrage...
Donc je crois que ton affirmation est fallacieuse.

n°378334
theshockwa​ve
I work at a firm named Koslow
Posté le 30-04-2003 à 15:19:55  profilanswer
 

sowhatin22 a écrit :


 
Juste pour rire, va regarder un jour le bouquin de reference sur les design pattern. Tu va constater par toi même qu'il y en a. Pourtant, c'est justement une bible sur la conception objet cet ouvrage...
Donc je crois que ton affirmation est fallacieuse.


 
Malgré tout, force est d'admettre que l'utilisation de friend gêne à la propreté du modèle objet ...


---------------
last.fm
n°378501
Kristoph
Posté le 30-04-2003 à 15:59:30  profilanswer
 

theShOcKwAvE a ecrit :


 
Malgre tout, force est d'admettre que l'utilisation de friend gene a la proprete du modele objet ...


 
Non, en C++, le friend ameliore la conception objet et l'encapsulation :)
 
En fait, selon moi friend doit etre utilise non pas pour fournir un access au donnees privees, mais pour fournir un canal de communication privilegie a certaines donnees. Utilise dans une situation ou le programmeur a le controle des deux classes concernees, cela permet d'ouvrir une voie de communication reservee entre ces deux classes sans pour autant donner l'access a toutes les autres classes du projet que tu ne controles pas toi meme !
 
C'est ma facon de voir l'utilite de friend :D


Message édité par Kristoph le 30-04-2003 à 16:02:38
n°378512
chrisbk
-
Posté le 30-04-2003 à 16:00:53  profilanswer
 

Kristoph a écrit :


 
Non, en C++, le friend ameliore la conception objet et l'encapsulation :)
 
En fait, bien souvent ( enfin, selon moi ;) ) friend est utilise non pas pour fournir un access au donnee privee, mais pour fournir un access privilegie a certaines donnees cachee. Utilise dans une situation un le programmeur a le controle a la fois de la classe principale et de la classe amie, cela permet d'ouvrir une voie de communication reservee entre ces deux classes sans pour autant donner l'access a toutes les autres ckasses du projet que tu ne controles pas toi meme !
 
C'est ma facon de voir l'utilite de friend :D
 


ouaip, pareil, parfois je regrette qu'il n'y ait pas qqchose de plus fin que private/public

n°378872
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 30-04-2003 à 20:13:37  profilanswer
 

theShOcKwAvE a écrit :


 
Malgré tout, force est d'admettre que l'utilisation de friend gêne à la propreté du modèle objet ...


 
Ben, oui ça viole le fondement même du paradigme objet : l'encapsulation [:spamafote]


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
mood
Publicité
Posté le 30-04-2003 à 20:13:37  profilanswer
 

n°378912
nraynaud
lol
Posté le 30-04-2003 à 20:30:28  profilanswer
 

Kristoph a écrit :


 
Non, en C++, le friend ameliore la conception objet et l'encapsulation :)


non, faut pas confondre mettre à disposition des gens uniquement ce qui les concernes et se foutre à poil devant ses potes.
 
Le système "friend" permet à l'ami en question de prendre ce qu'il veut, y compris de taper dans les champs qui ont des contrats à la con (genre qui ont un cache local etc.).
 
Un bon système est d'exporter une interface vers un destinataire ; c'est à dire que seul les objets instances du destinataire ont accès aux éléments exportés (méthode, champ, attribut, événement, types internes divers et autres bordels qu'on peut trouver dans une classe suivant le langage) mais pas plus. Si l'élément est exporté vers une autre classe, il n'y a pas accès, de même si l'élement est privé.
 
C'est en gros le système de droits d'accès aux classes d'Eiffel.

n°378916
schnapsman​n
Zaford Beeblefect
Posté le 30-04-2003 à 20:32:33  profilanswer
 

Tetragrammaton IHVH a écrit :


 
Ben, oui ça viole le fondement même du paradigme objet : l'encapsulation [:spamafote]


 
à méditer: (source http://www.parashift.com/c++-faq-l [...] #faq-14.2)
 
Do friends violate encapsulation?
No! If they're used properly, they enhance encapsulation.  
 
You often need to split a class in half when the two halves will have different numbers of instances or different lifetimes. In these cases, the two halves usually need direct access to each other (the two halves used to be in the same class, so you haven't increased the amount of code that needs direct access to a data structure; you've simply reshuffled the code into two classes instead of one). The safest way to implement this is to make the two halves friends of each other.  
 
If you use friends like just described, you'll keep private things private. People who don't understand this often make naive efforts to avoid using friendship in situations like the above, and often they actually destroy encapsulation. They either use public data (grotesque!), or they make the data accessible between the halves via public get() and set() member functions. Having a public get() and set() member function for a private datum is OK only when the private datum "makes sense" from outside the class (from a user's perspective). In many cases, these get()/set() member functions are almost as bad as public data: they hide (only) the name of the private datum, but they don't hide the existence of the private datum.  
 
Similarly, if you use friend functions as a syntactic variant of a class's public access functions, they don't violate encapsulation any more than a member function violates encapsulation. In other words, a class's friends don't violate the encapsulation barrier: along with the class's member functions, they are the encapsulation barrier.  
 
(Many people think of a friend function as something outside the class. Instead, try thinking of a friend function as part of the class's public interface. A friend function in the class declaration doesn't violate encapsulation any more than a public member function violates encapsulation: both have exactly the same authority with respect to accessing the class's non-public parts.)


Message édité par schnapsmann le 30-04-2003 à 20:33:40

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [VC++]friend class

 

Sujets relatifs
charger les class d'un repertoir avec un class loader[MFC] CList et class helpers
ralentissement avec une classmouseover modifier class css sur tout une rangée de cellule
PHP orienté objet. Class Caddie, comment récupérer "tous" les articlesProtéger ses .class (obfuscator, cryptage)
Crypter les fichiers class pour empecher le reverse enginering?PHP orienté objet: Class Caddie, pb : arrive pas a afficher l'objet
problème de constructeur class & cieComment appeller une class en PHP ?
Plus de sujets relatifs à : [VC++]friend class


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR