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

  FORUM HardWare.fr
  Programmation
  C++

  Overlord operator <<, aide svp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Overlord operator <<, aide svp

n°516897
xiluoc
un pc pour les unirs ....
Posté le 18-09-2003 à 09:56:52  profilanswer
 

:hello:  
 
Ma template a pour but de simuler une team queue,j ai defini une fonction display pour affiche cette meme team :

Code :
  1. template <class I, class T>
  2. void team_queue<I,T>::display()
  3. {
  4. bla bla
  5. }


sa marche bien, masi a la place je voudrai definir l operateur <<  
a la place de display.
 
C'est mieux de faire cout << myteamq; que myteamq.display();
comment faire sa pour dans mon cas  ?
 
merci.
 
 [:alarmclock119]  
 

mood
Publicité
Posté le 18-09-2003 à 09:56:52  profilanswer
 

n°516906
gatorette
Posté le 18-09-2003 à 10:15:36  profilanswer
 

Tu pourras trouver un début de réponse dans cet article (et tous les articles du même auteur traîtant du sujet)


---------------
each day I don't die is cheating
n°516910
LetoII
Le dormeur doit se réveiller
Posté le 18-09-2003 à 10:17:57  profilanswer
 

La forme classique de surcharge de l'operateur <<:

Code :
  1. class Maclasse
  2. {
  3.     public:
  4.          friend ostream & operator<<(ostream &stream,const Maclasse&obj);
  5. }


---------------
Le Tyran
n°516959
farib
Posté le 18-09-2003 à 11:22:20  profilanswer
 

titre : Overlord operator <<, aide svp
 
 
t'as produit trop de zerglings et maintenant t baisé fo faire plein d'overlords.....

n°516960
Taz
bisounours-codeur
Posté le 18-09-2003 à 11:22:42  profilanswer
 

LetoII a écrit :

La forme classique de surcharge de l'operateur <<:

Code :
  1. class Maclasse
  2. {
  3.     public:
  4.          friend ostream & operator<<(ostream &stream,const Maclasse&obj);
  5. }



:non: friend est a utilisé quand on ne peut pas faire autrement

n°516962
xiluoc
un pc pour les unirs ....
Posté le 18-09-2003 à 11:26:13  profilanswer
 

farib a écrit :

titre : Overlord operator <<, aide svp
 
 
t'as produit trop de zerglings et maintenant t baisé fo faire plein d'overlords.....


 [:alarmclock119]  
arf overload

n°516963
LetoII
Le dormeur doit se réveiller
Posté le 18-09-2003 à 11:34:28  profilanswer
 

Taz a écrit :

:non: friend est a utilisé quand on ne peut pas faire autrement


 
Voyons voir, si je veux que mon operateur externe est accés à toutes les données membre de mon objet j'ai pas trop le choix [:meganne]


---------------
Le Tyran
n°516964
skeye
Posté le 18-09-2003 à 11:37:29  profilanswer
 

xiluoc a écrit :


 [:alarmclock119]  
arf overload  


Tu peux aussi essayer de parler français, c'est francophone ici...et avec surcharge c'est plus dur de trouver une connerie à écrire... [:ddr555]

n°516965
LetoII
Le dormeur doit se réveiller
Posté le 18-09-2003 à 11:39:51  profilanswer
 

skeye a écrit :


Tu peux aussi essayer de parler français, c'est francophone ici...et avec surcharge c'est plus dur de trouver une connerie à écrire... [:ddr555]  


 
Sucage?  [:ddr555]  
 
 
[:dehors2]


---------------
Le Tyran
n°516966
Joel F
Real men use unique_ptr
Posté le 18-09-2003 à 11:39:57  profilanswer
 

LetoII a écrit :


 
Voyons voir, si je veux que mon operateur externe est accés à toutes les données membre de mon objet j'ai pas trop le choix [:meganne]


 
Hmmm, tu as fait une belle classe avec des set/get, t'as pas besoin de friend :o

mood
Publicité
Posté le 18-09-2003 à 11:39:57  profilanswer
 

n°516968
LetoII
Le dormeur doit se réveiller
Posté le 18-09-2003 à 11:41:57  profilanswer
 

Joel F a écrit :


 
Hmmm, tu as fait une belle classe avec des set/get, t'as pas besoin de friend :o


 
 :sarcastic: je vais me faire chier à appeler getMachin() alors que je peux directement faire machin, voyons [:meganne]


---------------
Le Tyran
n°516969
xiluoc
un pc pour les unirs ....
Posté le 18-09-2003 à 11:46:33  profilanswer
 

pourquoi sa marche toujours pas ?
 
 
ma template.h

Code :
  1. template <class I, class T> // item_type   team_type
  2. class team_queue
  3. {
  4.     public :
  5.        
  6.         struct teamq_struct
  7.         {
  8.                 vector <I> vect_item;
  9.                 T item_team;
  10.         };
  11.        
  12.         team_queue();
  13.         //default constructor
  14.        
  15.         ~team_queue();
  16.         //default destructor
  17.        
  18.         ostream& operator <<(ostream& stream,const team_queue& teamq);
  19.         //overloading operator << which call the fonction display
  20.        
  21.        
  22.         void push (I item,T team);
  23.         ///adds the supplied item belonging to the given team number
  24.         // to the team_queue in the apporpriate fashion
  25.      
  26.         void pop();
  27.         //removes the front from the team_queue
  28. .
  29. .
  30. .
  31. ect


 
 
ensuite les fonctions

Code :
  1. .
  2. .
  3. .
  4. /*
  5. |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
  6. DISPLAY : display all the elements of the team queue
  7. |______________________________________________________|
  8. */
  9. template <class I, class T>
  10. ostream& operator team_queue<I,T>::<<(ostream& stream,const team_queue<I,T>& teamq);
  11. {
  12. teamq.display();
  13. }
  14. template <class I, class T>
  15. void team_queue<I,T>::display()
  16. {
  17.      if (isempty()) error(1);
  18.      else
  19.      {
  20.           for (cursor = struct_vect.begin(); cursor != struct_vect.end(); cursor++)
  21.           for (int i =0; i < cursor->vect_item.size();i++)  cout << " (" <<  cursor->vect_item[i] << "," <<  cursor->item_team << " ) " << flush;
  22.           cout << endl;
  23.      }
  24. .
  25. .
  26. .


 
dans le main
 

Code :
  1. cout << mytq;


 
28 H:\PROGRAMMATION\C++\=[PROJETS]=\COMP 125\A3\main.cpp
no match for `std::ostream& << team_queue<std::string, int>&'  
 :sweat:

n°516975
gatorette
Posté le 18-09-2003 à 11:52:20  profilanswer
 

LetoII a écrit :

La forme classique de surcharge de l'operateur <<:

Code :
  1. class Maclasse
  2. {
  3.     public:
  4.          friend ostream & operator<<(ostream &stream,const Maclasse&obj);
  5. }




Bon, c'est vrai que le friend n'est pas indispensable (mais pas choquant non plus).
Mais il y a autre chose que je changerais :

Code :
  1. class Maclasse
  2. {
  3. public:
  4.   template<typename _E, typename _Tr>
  5.   /*friend*/ std::basic_ostream<_E,_Tr>& operator<<( std::basic_ostream<_E, _Tr> &os, const Maclasse& time );
  6. }


En effet, l'utilisateur peut vouloir "envoyer" sa classe dans des streams qui ne sont pas de type ostream (wcout par exemple).


---------------
each day I don't die is cheating
n°516977
ffluff
Challenge Everything
Posté le 18-09-2003 à 11:54:31  profilanswer
 

Code :
  1. template <class I, class T>
  2. ostream& operator team_queue<I,T>::<<(ostream& stream,const team_queue<I,T>& teamq);
  3. {
  4. teamq.display();
  5. }

???
 
c'est pas :

Code :
  1. template <class I, class T>
  2. ostream& team_queue<I,T>::operator<<(ostream& stream,const team_queue<I,T>& teamq);
  3. {
  4. teamq.display();
  5. }

plutot ?

n°516979
LetoII
Le dormeur doit se réveiller
Posté le 18-09-2003 à 11:56:21  profilanswer
 

gatorette a écrit :


Bon, c'est vrai que le friend n'est pas indispensable (mais pas choquant non plus).
Mais il y a autre chose que je changerais :

Code :
  1. class Maclasse
  2. {
  3. public:
  4.   template<typename _E, typename _Tr>
  5.   /*friend*/ std::basic_ostream<_E,_Tr>& operator<<( std::basic_ostream<_E, _Tr> &os, const Maclasse& time );
  6. }


En effet, l'utilisateur peut vouloir "envoyer" sa classe dans des streams qui ne sont pas de type ostream (wcout par exemple).


 
Certe, mais bon vu qu'il s'en sort pas avec un truc simple on va pas tout  de suite rentrer dasn les subtilités  :o


---------------
Le Tyran
n°516980
xiluoc
un pc pour les unirs ....
Posté le 18-09-2003 à 11:57:34  profilanswer
 

LetoII a écrit :


 
Certe, mais bon vu qu'il s'en sort pas avec un truc simple on va pas tout  de suite rentrer dasn les subtilités  :o  


sa serai sympa  :whistle:  
1) c est ma premiere template
2) premiere "surcharge" (non ponderal)

n°516981
chrisbk
-
Posté le 18-09-2003 à 11:57:44  profilanswer
 

LetoII a écrit :


 
 :sarcastic: je vais me faire chier à appeler getMachin() alors que je peux directement faire machin, voyons [:meganne]


 
ouais enfin a ce compte la balance tout en public et basta hein ?

n°516982
Taz
bisounours-codeur
Posté le 18-09-2003 à 11:57:48  profilanswer
 

z'etes teubé
 
template<typename T>
inline ostream & operator<<(ostream &os, const machin<T> &m)
{
  os << m.print();  
  return os;
}
 
en général, on ne déclare pas les opérateurs binaires (sauf exception) en fonction membre ou friend.
 
on voit souvent
 
ostream & operator<< (ostream &os, const truc &t)
{
  t.print(os);
  return os;
}
 

n°516983
gatorette
Posté le 18-09-2003 à 11:57:49  profilanswer
 

xiluoc a écrit :

pourquoi sa marche toujours pas ?
 

Code :
  1. template <class I, class T> // item_type   team_type
  2. class team_queue
  3. {
  4.     public :
  5.        
  6.         struct teamq_struct
  7.         {
  8.                 vector <I> vect_item;
  9.                 T item_team;
  10.         };
  11.        
  12.         team_queue();
  13.         //default constructor
  14.        
  15.         ~team_queue();
  16.         //default destructor
  17.        
  18.         template <class I, class T> // A rajouter je pense
  19.         ostream& operator <<(ostream& stream,const team_queue<I,T>& teamq);
  20.         //overloading operator << which call the fonction display
  21.        
  22.        
  23.         void push (I item,T team);
  24.         ///adds the supplied item belonging to the given team number
  25.         // to the team_queue in the apporpriate fashion
  26.      
  27.         void pop();
  28.         //removes the front from the team_queue
  29. .
  30. .
  31. .
  32. ect


 
 
ensuite les fonctions

Code :
  1. .
  2. .
  3. .
  4. /*
  5. |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
  6. DISPLAY : display all the elements of the team queue
  7. |______________________________________________________|
  8. */
  9. template <class I, class T>
  10. ostream& operator team_queue<I,T>::<<(ostream& stream,const team_queue<I,T>& teamq);
  11. {
  12. teamq.display(stream);
  13. return stream; // il faut retourner le stream!
  14. }
  15. template <class I, class T>
  16. void team_queue<I,T>::display(ostream& stream) // il faut sortir dans le stream et pas dans cout!
  17. {
  18.      if (isempty()) error(1);
  19.      else
  20.      {
  21.           for (cursor = struct_vect.begin(); cursor != struct_vect.end(); cursor++)
  22.           for (int i =0; i < cursor->vect_item.size();i++)  stream << " (" <<  cursor->vect_item[i] << "," <<  cursor->item_team << " ) " << flush;
  23.           stream << endl;
  24.      }
  25. }


 


 
Je ne trouve vraiment pas ça très élégant. Va voir les liens que j'ai donné au-dessus...


---------------
each day I don't die is cheating
n°516998
Taz
bisounours-codeur
Posté le 18-09-2003 à 12:13:49  profilanswer
 

Code :
  1. #include <iostream>
  2. #include <typeinfo>
  3. template<typename T>
  4. class Foo
  5. {
  6. public:
  7.   void print(std::ostream &os) const
  8.   {
  9.     os << typeid(*this).name() << std::endl;
  10.   }
  11. };
  12. template<typename T>
  13. std::ostream& operator<<(std::ostream &os, const Foo<T> &f)
  14. {
  15.   f.print(os);
  16.   return os;
  17. }
  18. int main()
  19. {
  20.   Foo<int> fi;
  21.   std::cout << fi;
  22. }

n°517002
xiluoc
un pc pour les unirs ....
Posté le 18-09-2003 à 12:17:09  profilanswer
 

:whistle:


Message édité par xiluoc le 18-09-2003 à 12:23:14
n°517005
Taz
bisounours-codeur
Posté le 18-09-2003 à 12:18:26  profilanswer
 

rien à foutre

n°517009
chrisbk
-
Posté le 18-09-2003 à 12:23:09  profilanswer
 

xiluoc a écrit :

Full source
 
...
 


Merci mais j'ai deja du PQ

n°517010
xiluoc
un pc pour les unirs ....
Posté le 18-09-2003 à 12:23:57  profilanswer
 

chrisbk a écrit :


Merci mais j'ai deja du PQ


 :kaola:

mood
Publicité
Posté le   profilanswer
 


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

  Overlord operator <<, aide svp

 

Sujets relatifs
Aide requete MySQLCh aide pr site perso sur php nuke
[C++] Demande d'aide pour un programme[MySQL] Besoin d'aide sur les types de Variables
Aide pr des boutons pr nouveau site internetBesoin d'aide a propos d'un projet
Besoin d'aide dans la création de mon site{NEWBIE] besoin d'aide pour la création de mon site
Vite j'ai besoin d'aide!!!!! 
Plus de sujets relatifs à : Overlord operator <<, aide svp


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