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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Surchage de l'opérateur []

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Surchage de l'opérateur []

n°1663799
Cyrk13
in the sky...
Posté le 28-12-2007 à 20:25:19  profilanswer
 

Hello tout le monde,
 
je voulais juste savoir comment surcharger l'opérateur [] de manière statique pour je puisse écrire un truc du genre :

Code :
  1. Recette::Recueil[i]


 
Voici le reste du code (qui marche pas  :D juste pour donner l'idée):

Code :
  1. class Recette : public Ingredient
  2. {
  3. private:
  4.     static vector<Recette*> _recettes;
  5.     [...]
  6. public:
  7.     [...]
  8.     class Recueil
  9.     {
  10.            static Recette& operator[](unsigned int i,vector<Recette*> & _recettes); // ???
  11.     };
  12. };
  13. Recette& operator[](unsigned int i,vector<Recette*> & _recettes)
  14. {
  15.     return *_recettes[i];
  16. }


Message édité par Cyrk13 le 28-12-2007 à 20:36:08
mood
Publicité
Posté le 28-12-2007 à 20:25:19  profilanswer
 

n°1663809
IrmatDen
Posté le 28-12-2007 à 21:31:24  profilanswer
 

Salut,
 
Tu devrais plutôt définir un livre de recettes externe, tu n'aurais pas besoin de ce static inutile et ce sera plus propre. Et au passage, un livre de recette peut très bien être un typedef sur vector ou map (si tu as des noms) etc...
 
En plus clair, je ne vois:
> ni pourquoi Recette dérive d'Ingredient,
> ni pourquoi Recueil est une classe interne à Recette,
> ni pourquoi tu as besoin de ces membres statiques.

n°1663817
Cyrk13
in the sky...
Posté le 28-12-2007 à 22:09:52  profilanswer
 

Oui je sais, la construction de ces classes est assez crade mais imposée,je n'ai pas le choix :(

Message cité 1 fois
Message édité par Cyrk13 le 28-12-2007 à 22:10:34
n°1663831
Joel F
Real men use unique_ptr
Posté le 28-12-2007 à 22:51:44  profilanswer
 

Cyrk13 a écrit :

Oui je sais, la construction de ces classes est assez crade mais imposée,je n'ai pas le choix :(


 
stuen blague ?
 
si c'est pour un vrai job, change de job.
si c'est pour un Tp, change d'école.
 
En 10s ,
 
Une Recette AGGREGE des ingredients.
Un Receuil AGGREGE des recettes.
 
Point d'héritage mais de l'aggrégation (à coup de std::vector ca devrait suffire)

n°1663872
Cyrk13
in the sky...
Posté le 29-12-2007 à 02:38:22  profilanswer
 

s'pour un TP  :whistle:

n°1663882
Joel F
Real men use unique_ptr
Posté le 29-12-2007 à 10:25:57  profilanswer
 

et ton prof te demandes EXPLICITEMENT de faire ça ?
C'est quoi l'école ou la fac ?

n°1663885
Cyrk13
in the sky...
Posté le 29-12-2007 à 10:53:51  profilanswer
 

la fac, en fait à partir d'un code donné (celui du main) et d'un diagramme UML, on doit deviner tout le reste. Et parmis ce code, il y a la ligne :

Code :
  1. Recette::Recueil[i]


Mais je pense que cette construction n'est juste qu'un moyen pour nous confronter à cette difficulté.

n°1663886
Joel F
Real men use unique_ptr
Posté le 29-12-2007 à 10:56:25  profilanswer
 

il te dise pas de faire du static ?
Receuil::Recueil[i] c'ets juste une notation pr signifier qu'il faut un operator[]
 
De tte façon, les operator[] ne peuvent pas êtres des membres de classes, juste des memebres d'insatcnes.
 
Quelle fac ?

n°1663890
Cyrk13
in the sky...
Posté le 29-12-2007 à 11:19:10  profilanswer
 

L3 Info à Nantes.
Recette::Recueil[i] ==> Recette::Receuil.operator[](i) si je ne me trompe pas et vu que Recueil est une classe et non une instance j'en ai déduit que que la méthode doit être static. Après il y a peut-être un autre moyen mais je trouve pas :(

n°1663911
Joel F
Real men use unique_ptr
Posté le 29-12-2007 à 14:15:28  profilanswer
 

Citation :

thierry lapresté télécharger


Ok, je rajoute su rma liste de fac moche :o

 

Y a pas moyen [] est forcement membre d'instance.
Une truc débile, rapide qui marche

 
Code :
  1. class Ingredient
  2. {
  3.   public:
  4.   Ingredient(const std::string& nom) : mNom(nom) {}
  5.   Ingredient( const Ingredient& src) : mNom(src.mNom) {}
  6.   ~Ingredient() {}
  7.   Ingredient& operator=( const Ingredient& src )
  8. {
  9.    if(src != this ) mNom = src.nom;
  10.    return *this;
  11. }
  12.   const std::string& identifiant() const { return mNom; }
  13.   std::string& identifiant() { return mNom; }
  14.   private :
  15.   std::string mNom;
  16. };
  17. class Receuil
  18. {
  19.   public:
  20.   Receuil(const std::string& nom, size_t nbRec) : mNom(nom), mRecettes(nbRec) {}
  21.   Receuil( const Receuil& src) : mNom(src.mNom), mRecettes(src.mRecettes) {}
  22.   ~Receuil() {}
  23.   Receuil& operator=( const Receuil& src )
  24. {
  25.    if(src != this )
  26.   { 
  27.     mNom = src.nom;
  28.     mRecettes= src.mRecettes;
  29.   }
  30.    return *this;
  31. }
  32.   const std::string& identifiant() const { return mNom; }
  33.   std::string& identifiant() { return mNom; }
  34.   const Recette& operator[](size_t i) const { return mRecettes[i]; }
  35.   Recette& operator[](size_t i){ return mRecettes[i]; }
  36.   private :
  37.   std::string mNom;
  38.   std::vector<Recette> mRecettes;
  39. };
 

C'ets qd même pas compliqué ...


Message édité par Joel F le 29-12-2007 à 14:35:02
mood
Publicité
Posté le 29-12-2007 à 14:15:28  profilanswer
 

n°1664299
Cyrk13
in the sky...
Posté le 31-12-2007 à 15:49:52  profilanswer
 

Ué merci, c'est sûr que c'est plus cohérent et plus simple mais l'instruction Recette::Recueil[i] ne marchera pas :(

n°1664403
Joel F
Real men use unique_ptr
Posté le 01-01-2008 à 12:13:56  profilanswer
 

normal elle a pas de jambes :o
 
C'ets quoi le message d'erreur ?

n°1664419
Cyrk13
in the sky...
Posté le 01-01-2008 à 13:47:17  profilanswer
 

error : `static Recette& Recette::Recueil::operator[] (unsigned int, Recette::Recueil& )' must be a nonstatic member function

n°1664424
Joel F
Real men use unique_ptr
Posté le 01-01-2008 à 14:10:02  profilanswer
 

tu ecoutes ce que je te dis (et ce que dis ton compialteur apr la même occassion). Tu ne peux pas avori de surcharge d'opertaeur statique.
 
LA seule solution est celle que je viens de donner.


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

  [C++] Surchage de l'opérateur []

 

Sujets relatifs
[C++] Problème avec l'opérateur %[Mysql] opérateur 'ou'
surcharge operateur <Probleme de surcharge d'opérateur et de fonction amies
surcharge de l'opérateur =Surcharge de l'opérateur = + Appel non souhaité à delete
Surcharge d'opérateur sur des structures[C++]petite question sur l'opérateur de conversion de classe
surcharger l'opérateur '+=' ? [résolu][PHP] operateur Like
Plus de sujets relatifs à : [C++] Surchage de l'opérateur []


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)