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

  FORUM HardWare.fr
  Programmation
  C++

  Operateur doublé

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Operateur doublé

n°1944480
Bebs
Posté le 25-11-2009 à 14:36:34  profilanswer
 

Bonjour,
je souhaiterai construire un operateur doublé qui serait du style :

Code :
  1. // .hpp
  2.   void operator [] (const int& ) operator = (const Vec& ) ;


Code :
  1. // .cpp
  2.   void GroupVec::operator [] (const int& i) operator = (const Vec& V)
  3.   {
  4.     for(int j = 0 ; j < V.size() ; ++j)
  5.     {
  6.       v[i][j] = V(j) ;
  7.     }
  8.   }


Cela permettrait de faire :

Code :
  1. // main.cpp
  2. Vec V ;
  3. GroupVec GV ;
  4. Gv[3] = V ;


 
La syntaxe que je propose ne fonctionne pas, et je n'ai rien trouvé les documentations un moyen de surcharger un opérateur doublé [] = avec deux paramètres.

mood
Publicité
Posté le 25-11-2009 à 14:36:34  profilanswer
 

n°1944503
theshockwa​ve
I work at a firm named Koslow
Posté le 25-11-2009 à 14:56:10  profilanswer
 

Bebs a écrit :

Bonjour,
je souhaiterai construire un operateur doublé qui serait du style :

Code :
  1. // .hpp
  2.   void operator [] (const int& ) operator = (const Vec& ) ;


Code :
  1. // .cpp
  2.   void GroupVec::operator [] (const int& i) operator = (const Vec& V)
  3.   {
  4.     for(int j = 0 ; j < V.size() ; ++j)
  5.     {
  6.       v[i][j] = V(j) ;
  7.     }
  8.   }


Cela permettrait de faire :

Code :
  1. // main.cpp
  2. Vec V ;
  3. GroupVec GV ;
  4. Gv[3] = V ;


 
La syntaxe que je propose ne fonctionne pas, et je n'ai rien trouvé les documentations un moyen de surcharger un opérateur doublé [] = avec deux paramètres.


 
que veux tu dire par opérateur doublé ?  [:pingouino]  
 
Tu veux juste que ton opérateur [] retourne une instance de quelque chose qui supporte =, non ?
 
Edit : j'aurais du lire l'exemple !
 
Il te suffit pour ca que ton opérateur crochets retourne une référence vers l'élémenty à assigner et basta ! (et n'oublie pas de faire un opérateur constant qui te retourne une référence constante au passage)
 
Edit 2 : quelle tête a ta structure de données ? C'est un vecteur de vecteurs ?

Message cité 1 fois
Message édité par theshockwave le 25-11-2009 à 15:09:30

---------------
last.fm
n°1944544
Taz
bisounours-codeur
Posté le 25-11-2009 à 15:22:52  profilanswer
 

voila, retourner une référence.
Sinon c'est le DP Proxy

n°1944561
Bebs
Posté le 25-11-2009 à 15:29:46  profilanswer
 

theshockwave a écrit :


Edit 2 : quelle tête a ta structure de données ? C'est un vecteur de vecteurs ?


Oui, GroupVec est une sorte de "paquet" de vecteurs.
 
L'operateur [] est déjà surchargé pour faire

Code :
  1. Vec W = GroupVec[2] ;


 
Ce que j'aimerai faire, c'est fabriquer un Vec dans un coin, et le mettre dans GroupVec autrement dit, faire une affectation dans l'autre sens.

Code :
  1. Vec V ;
  2. V(0) = 2.4 ;
  3. //... fabrication de V
  4. V(3) = 4. ;
  5. GroupVec[2] = V ;


 
Voici mon opérateur crochet qui me permet d'acceder à un Vec à l'interieur d'un GroupVec :

Code :
  1. Vec GroupVec::operator [] (const int & i)
  2.   {   
  3.   Vec A(ns) ; // ns est protected dans la classe GroupVec et donne la taille des Vec
  4.     for (int ii = 0 ; ii < ns ; ++ii)
  5.     {
  6.       A(ii) = v[i][ii] ; // // v est protected dans la classe GroupVec, c'est un double**
  7.     }
  8.     return A ;
  9.   }

n°1944639
Bebs
Posté le 25-11-2009 à 16:17:46  profilanswer
 

Bebs a écrit :


Voici mon opérateur crochet :

Code :
  1. Vec GroupVec::operator [] (const int & i)
  2.   {   
  3.   Vec A(ns) ; // ns est protected dans la classe GroupVec et donne la taille des Vec
  4.     for (int ii = 0 ; ii < ns ; ++ii)
  5.     {
  6.       A(ii) = v[i][ii] ; // // v est protected dans la classe GroupVec, c'est un double**
  7.     }
  8.     return A ; // <----- A est local
  9.   }



 
Excusez-moi d'écrire deux messages de suite, mais je ne peux pas mettre de référence pour mon opérateur crochet car l'objet retourné est local...

n°1944641
theshockwa​ve
I work at a firm named Koslow
Posté le 25-11-2009 à 16:20:01  profilanswer
 

Bebs a écrit :


Oui, GroupVec est une sorte de "paquet" de vecteurs.
 
L'operateur [] est déjà surchargé pour faire

Code :
  1. Vec W = GroupVec[2] ;


 
Ce que j'aimerai faire, c'est fabriquer un Vec dans un coin, et le mettre dans GroupVec autrement dit, faire une affectation dans l'autre sens.

Code :
  1. Vec V ;
  2. V(0) = 2.4 ;
  3. //... fabrication de V
  4. V(3) = 4. ;
  5. GroupVec[2] = V ;


 
Voici mon opérateur crochet qui me permet d'acceder à un Vec à l'interieur d'un GroupVec :

Code :
  1. Vec GroupVec::operator [] (const int & i)
  2.   {   
  3.   Vec A(ns) ; // ns est protected dans la classe GroupVec et donne la taille des Vec
  4.     for (int ii = 0 ; ii < ns ; ++ii)
  5.     {
  6.       A(ii) = v[i][ii] ; // // v est protected dans la classe GroupVec, c'est un double**
  7.     }
  8.     return A ;
  9.   }



 
Ca ne te convient pas, ca ?

Code :
  1. Vec& GroupVec::operator [] (size_t i)
  2.   {   
  3.       return v[i] ;
  4.   }


 
 
Edit : les const ref sur les types genre int, c'est le mal :o

Message cité 1 fois
Message édité par theshockwave le 25-11-2009 à 16:21:04

---------------
last.fm
n°1944643
theshockwa​ve
I work at a firm named Koslow
Posté le 25-11-2009 à 16:22:31  profilanswer
 

Bebs a écrit :


 
Excusez-moi d'écrire deux messages de suite, mais je ne peux pas mettre de référence pour mon opérateur crochet car l'objet retourné est local...


 
Et pourquoi est-il local ? Si tu manipules un groupe de vecteurs, pourquoi choisir de stocker les infos de ces vecteurs à la main plutôt que d'avoir ... un groupe de vecteurs (std::vector, c'est bien, aussi)


---------------
last.fm
n°1944670
Bebs
Posté le 25-11-2009 à 17:30:24  profilanswer
 

theshockwave a écrit :


 
Ca ne te convient pas, ca ?

Code :
  1. Vec& GroupVec::operator [] (size_t i)
  2.   {   
  3.       return v[i] ;
  4.   }



 
Malheureusement, v[i] est un objet de type double* (puisque v est de type double**) et je voudrais retourner un objet de type Vec.
 

theshockwave a écrit :


 
Et pourquoi est-il local ? Si tu manipules un groupe de vecteurs, pourquoi choisir de stocker les infos de ces vecteurs à la main plutôt que d'avoir ... un groupe de vecteurs (std::vector, c'est bien, aussi)


 
Je dois créer une classe avec des objets un peu particuliers et les standards ne sont pas suffisants...

n°1944673
theshockwa​ve
I work at a firm named Koslow
Posté le 25-11-2009 à 17:35:59  profilanswer
 

Bebs a écrit :


Je dois créer une classe avec des objets un peu particuliers et les standards ne sont pas suffisants...


 
Je comprends bien, mais ma question était : si tu sais que ce sont des vecteurs que tu manipules dans ton conteneur (GroupVec) alors pourquoi éclater leurs composantes dans un tableau plutôt que de faire directement un tableau de "Vec" qui seront peut-être plus facile à manipuler ? Faire des copies de données dans tous les sens, ce n'est jamais une bonne idée. Quand, pour accéder simplement à la valeur d'un tableau, tu commences à devoir recopier les données, c'est mauvais signe.


---------------
last.fm
n°1944686
Joel F
Real men use unique_ptr
Posté le 25-11-2009 à 17:55:15  profilanswer
 

deja arrete d'utiliser des double** et fait betement un vector<vector<double>> et renvoit des ref sur les vector interne ...

mood
Publicité
Posté le 25-11-2009 à 17:55:15  profilanswer
 

n°1944862
Bebs
Posté le 26-11-2009 à 10:58:01  profilanswer
 

theshockwave a écrit :


 
Et pourquoi est-il local ? Si tu manipules un groupe de vecteurs, pourquoi choisir de stocker les infos de ces vecteurs à la main plutôt que d'avoir ... un groupe de vecteurs (std::vector, c'est bien, aussi)


 

Joel F a écrit :

deja arrete d'utiliser des double** et fait betement un vector<vector<double>> et renvoit des ref sur les vector interne ...


 
Merci. vector semble être une bonne solution.
Je pense que je vais réussir à m'en sortir.
 :hello:  


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

  Operateur doublé

 

Sujets relatifs
Erreur mysql : corrupted double-linked listImpossible de suprimer un fichier .htacces en double
Double dollar -> Deux variables en une seuleProblème requête select avec double résultats
Double doublons Accessdouble click "copier/coller" en VBA
Probleme de T_DOUBLE_ARROWFuite mémoire tableau double entrée..
[C/C++] Difference entre pointeur et double pointeur ?Probleme de surcharge operateur <<
Plus de sujets relatifs à : Operateur doublé


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