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

  FORUM HardWare.fr
  Programmation
  C++

  surcharger l'operator[] ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

surcharger l'operator[] ???

n°829075
lunarnet76
Posté le 22-08-2004 à 22:05:16  profilanswer
 

J'ai un big probleme, j'aimerais utiliser ma class
[cpp]
class m{
m(int ja=1,int jb=2)a(ja),b(jb){}
private a,b;
};
[cpp]
 
du genre
[cpp]
void main(){
m a,b,c,d;
int tableau[]={a,b,c,d};
}
[cpp]
Comment faire?

mood
Publicité
Posté le 22-08-2004 à 22:05:16  profilanswer
 

n°829077
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:07:18  profilanswer
 

commence par filer du vrai code et expliquer ce que tu veux faire

n°829087
lunarnet76
Posté le 22-08-2004 à 22:21:56  profilanswer
 

ben en faite j'ai une classe de fractions et j'aimerais utiliser les tableaux de la meme maniere qu'avec des int mais avec des fractions!

n°829092
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:24:05  profilanswer
 

et en première année on t'as pas appris comment on fait un tableau ?
 

<type des éléments> <nom du tableau>[ <nombre d'éléments> ]

ou <nombre d'éléments> est connu à la compilation.

n°829093
cris56
Posté le 22-08-2004 à 22:25:47  profilanswer
 

ou est le probleme ?
j'ai pas compris, tu veux faire quoi concretement ?

n°829104
lunarnet76
Posté le 22-08-2004 à 22:33:18  profilanswer
 

je veux remplir un tableau d'objet! et j'ai beau faire  
Fraction a,b
Fraction c[]={a,b};
c n'est pas un tableau comme on l aurait si on faisait
int a,b;
int c[]={a,b}
c clair comme ca ou non?


---------------
!jb!
n°829106
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:35:06  profilanswer
 

non

n°829108
cris56
Posté le 22-08-2004 à 22:35:36  profilanswer
 

tu sais  ce que ca fais ca precisement ?
 
int a,b;  
int c[]={a,b}

n°829110
lunarnet76
Posté le 22-08-2004 à 22:39:43  profilanswer
 

cris56 a écrit :

tu sais  ce que ca fais ca precisement ?
int a,b;  
int c[]={a,b}


ben int a,b; ca définit 2 variables (ca met n importe quel nombre)
et int c[]={a,b} ca remplit le tableau c avec les valeurs a et b,  
c[i] ca signifie juste *(c+a), c est juste l'adresse de l'élément initial du tableau et c+i l adresse de l'élément i ...
voila quoi!

n°829111
cris56
Posté le 22-08-2004 à 22:43:52  profilanswer
 

mais quel est l'interet ?

mood
Publicité
Posté le 22-08-2004 à 22:43:52  profilanswer
 

n°829113
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:45:27  profilanswer
 

et pourquoi tu t'interdit de faire la même chose avec des classes ?

n°829114
lunarnet76
Posté le 22-08-2004 à 22:47:02  profilanswer
 

Code :
  1. class Fraction{
  2. public:
  3. //Constructeurs
  4. Fraction(int n=0,int d=1):num(n),den(d){}
  5. Fraction(){num=0;den=1;}
  6. Fraction(const Fraction& ){}
  7.         //
  8. void Reduire();
  9. private:
  10. int num;
  11. int den;
  12. };
  13. class Matrice{
  14. public :
  15.  Matrice(){nc=5;nl=5;}
  16. private:
  17.  int nc;
  18.  int nl;
  19.  int tab[5][5];
  20. };


et je voudrais que ce soit  

Code :
  1. Fraction tab[5][5];


dans ma classe matrice!!!
Au nivo de l'interet c'est simple: dans les operations matricielles ce sera 20 fois plus facile simplement parce que je peut utiliser par exenple juste a*b avec a=22/6 et b=51/4


---------------
!jb!
n°829116
cris56
Posté le 22-08-2004 à 22:48:21  profilanswer
 

tu fera attention tu a ecrsi 2 fois le constructeur par defaut dans ta classe fraction

n°829117
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:49:15  profilanswer
 

ben fais le :o
sauce template si t'en es capable.
sinon on peut t'orienter vers des bibliothèques avec déjà tout.
 
 
 Fraction(int n=0,int d=1)
 Fraction()
 
oh la jolie ambiguité

n°829119
cris56
Posté le 22-08-2004 à 22:49:22  profilanswer
 

ou est le probleme avec Fraction tab[5][5];  ?

n°829121
lunarnet76
Posté le 22-08-2004 à 22:52:39  profilanswer
 

cris56 a écrit :

ou est le probleme avec Fraction tab[5][5];  ?


si je fais  

Code :
  1. void main(){
  2. Fraction b(22,33),c(19,16),d(15,35);
  3. Fraction d[]={b,c,d};
  4. }


par exemple ca me dit  
'd' : 'class Fraction []' differs in levels of indirection from 'class Fraction'j'ai oublié quoi??? ou j ai mal compris quoi?

n°829122
cris56
Posté le 22-08-2004 à 22:54:00  profilanswer
 

ta 2 fois une variable d !

n°829123
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:54:13  profilanswer
 

int main :o
 
du reste on te l'a dit le problème

n°829124
lunarnet76
Posté le 22-08-2004 à 22:55:00  profilanswer
 

Taz a écrit :

ben fais le :o
sauce template si t'en es capable.
sinon on peut t'orienter vers des bibliothèques avec déjà tout.


1) lol j'ai deja suffisament de mal pour faire ca en template, c trop abstrait pour moi pour l instant
2) Je fais cette class est le reste sans aucune utilité pratique derriere mais juste pour apprendre donc ce serait plus cool si j y arrivais tout seul en comprenant!
 ;)


---------------
!jb!
n°829125
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:56:13  profilanswer
 

tu sais apprendre à utiliser une bibliothèque, c'est un exercice comme un autre.

n°829127
lunarnet76
Posté le 22-08-2004 à 22:56:37  profilanswer
 

cris56 a écrit :

ta 2 fois une variable d !


aRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGHHHHHHHHHHHH la honte ... ca fais 2heures que je cherche et que je capte pas pourquoi ca marche pas... mince alors lol !!!!
ben trop merci, je vais me repencher la dessus!!! quel bétise!!! lol
 
ps: sinon Taz, pkoi int main et pas void???

n°829129
cris56
Posté le 22-08-2004 à 22:57:42  profilanswer
 

c'est dans le standard c++, question de portabilité, sur certain systeme void main() ne compile pas

n°829130
Taz
bisounours-codeur
Posté le 22-08-2004 à 22:58:18  profilanswer
 

parce que c'est comme ça, la Sainte Norme le dit. pour toi ça ne change rien, tu mets int à la place de void, et comme les Écritures le dise, tu peux te passer de 'return 0' final, celui-ci étant implicite. Bref tu économises 1 caractère et tu rends ton programme conforme.

n°829131
lunarnet76
Posté le 22-08-2004 à 22:59:11  profilanswer
 

cris56 a écrit :

c'est dans le standard c++, question de portabilité, sur certain systeme void main() ne compile pas


ah ok!
euh sinon pk :

Code :
  1. void main(){
  2. Fraction b(22,33),c(19,16),d(15,35);
  3. Fraction e[3]={b,c,d};
  4. cout<<e[0]<<e[1];
  5. }


ca marche pas???
Sachant  

Code :
  1. friend ostream& operator<<(ostream& ostr,const Fraction& t){return (ostr<<t.num<<'/'<<t.den);}

dans ma classe fraction...


Message édité par lunarnet76 le 22-08-2004 à 23:05:32

---------------
!jb!
n°829132
Taz
bisounours-codeur
Posté le 22-08-2004 à 23:00:44  profilanswer
 

quoi ça marche pas ? tu veux pas faire sans friend ?
 
 
remarque:  
"une chaine"  'c' <- un caractère.
 

n°829133
lunarnet76
Posté le 22-08-2004 à 23:05:02  profilanswer
 

Taz a écrit :

quoi ça marche pas ? tu veux pas faire sans friend ?


ben euh... c'est a dire que sans friend je sais pas comment le mettre dans la fonction ...

n°829135
Taz
bisounours-codeur
Posté le 22-08-2004 à 23:07:29  profilanswer
 

moi je te conseille de ne pas utiliser friend, du moins qu'en dernier recours
 

Code :
  1. #include <iostream>
  2. struct Fraction
  3. {
  4.   void print(std::ostream &os) const
  5.   {
  6.     /* ce que tu veux */
  7.   }
  8. };
  9. inline std::ostream & operator<<(std::ostream &os, const Fraction &f)
  10. {
  11.   f.print(os);
  12.   return os;
  13. }

est une manière répandue de procéder.
 
 
après
 

Code :
  1. cout << a;

n°829136
cris56
Posté le 22-08-2004 à 23:09:37  profilanswer
 

a ouai comme ca c'est pas mal

n°829138
lunarnet76
Posté le 22-08-2004 à 23:15:35  profilanswer
 

rooo non ca marche pas, ca affiche toujours n'importe quoi...comme si le Fraction e[]={b,c,d} faisait Fraction e[]={}

n°829141
lunarnet76
Posté le 22-08-2004 à 23:18:33  profilanswer
 

bon en fait mon code source sans rien... c

Code :
  1. #include <iostream>
  2. class Fraction{
  3. public:
  4. Fraction(int n=0,int d=1):num(n),den(d){}
  5. Fraction(const Fraction& ){}
  6. void print(std::ostream &os) const {
  7.  std::cout<<num<<'/'<<den;
  8.     }
  9. private:
  10. int num;
  11. int den;
  12. };
  13. inline std::ostream & operator<<(std::ostream &os, const Fraction &f)
  14.   {
  15.       f.print(os);
  16.       return os;
  17.   }
  18. class Matrice{
  19. public :
  20.  Matrice(){nc=1;nl=3;}
  21. private:
  22.  int nc;
  23.  int nl;
  24.  int tab[5][5];
  25. };
  26. void main(){
  27. Fraction b(22,33),c(19,16),d(15,35);
  28. Fraction e[3]={b,c,d};
  29. std::cout<<e[0]<<e[1];
  30. }


allez dites moi ce que j ai betement oublié  :bounce:  :bounce:  :bounce:  :bounce:

n°829142
Taz
bisounours-codeur
Posté le 22-08-2004 à 23:19:12  profilanswer
 

t'as ton constructeur de recopie et ton operator= ? si ta classe est simple, même pas la peine de les définir, le compilateur générera quelque chose d'acceptable
 
 
il te faut, selon Copline:
constructeur par défaut, constructeur avec arguments, constructeur de recopie, operator= et destructeur. je te conseille de les définir, des mettres de s affichages dedans pour bien comprendre ce qui se passe.

n°829143
Taz
bisounours-codeur
Posté le 22-08-2004 à 23:19:34  profilanswer
 

Fraction(const Fraction& ){}  
 
ça recopie rien ça

n°829147
lunarnet76
Posté le 22-08-2004 à 23:24:23  profilanswer
 

Taz a écrit :

Fraction(const Fraction& ){}  
 
ça recopie rien ça


 Fraction(const Fraction& r):num(r.num),den(r.den){}

n°829148
lunarnet76
Posté le 22-08-2004 à 23:26:43  profilanswer
 

Victoire ca marche!!! ROOLLLALA comment j suis trop content!!!
Trop merci les mecs!!! j'en dormirais mieux!!!

mood
Publicité
Posté le   profilanswer
 


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

  surcharger l'operator[] ???

 

Sujets relatifs
Incapable de surcharger un <<problème avec 'operator type();' : ambiguité
Overlord operator <<, aide svpComportement de ostream& operator<<(ostream&, basic_string)
[php] surcharger un constructeurC++ operator sans cast
[Perl] matching operator, substitution et regexp...surcharger une methode
Plus de sujets relatifs à : surcharger l'operator[] ???


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