surcharge d'operateur quand en faire des fonctions membres/pas membres

surcharge d'operateur quand en faire des fonctions membres/pas membres - C++ - Programmation

Marsh Posté le 16-06-2003 à 09:16:07    

Comment savoir si un fonction de surcharge doit etre membres ou friend??

Reply

Marsh Posté le 16-06-2003 à 09:16:07   

Reply

Marsh Posté le 16-06-2003 à 12:45:17    

règle générale: n'utiliser friend qu'en dernier recours
 
explication sur un exemple:
 
1) quand utliser une surcharge d'opérateur sur une fonction membre: quand le résultat de l'opération travaille avec this, en lecture ou en ecriture: [], +=, =, (), etc.
 
2) quand utiliser une surcharge d'oérateur sur une fonction externe non friend: quand la condition précédente n'est pas remplie et que la fonction est symétrique. +, -, <, ==
 
friend en dernier recours
 
 

Code :
  1. class A
  2. {
  3.   const A & operator+=(const A &other);
  4.   string print() const;
  5.   ostream & print(ostream & ) const;
  6. };


 
avec ça c'est facile de faire la + hors classe
 

Code :
  1. A operator+(const A &lhs, const A &rhs)
  2. {
  3.   A tmp(lhs);
  4.   tmp+=b;
  5.   return tmp;
  6. }

personnellement j'utilise toujours cela pour les opérateurs binaires (+,..., < ) j'ai meme des macros pour générer tout ça.
 
la classe A a deux méthode: une qui renvoie une représentation, l'autre qui ecrit cette représentation dans un flux.
 
si  
 
cout << A.print()
 
ou
 
A.print(cout)  
 
ne te satisfont pas
 
tu peux alors sans friendness, surcharger un opérateur.
 
je fonctionne aussi comme ça, l'avantage et que la fonction membre print() permet de représenter un objet dans une chaine simplement, sinon tu devrait passer par un stringstream
 
 
tout ça constitue une bonne technique de design et une bonne maitrise de inlining permet des performances parfaites

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed