surcharger l'operator[] ???

surcharger l'operator[] ??? - C++ - Programmation

Marsh Posté le 22-08-2004 à 22:05:16    

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?

Reply

Marsh Posté le 22-08-2004 à 22:05:16   

Reply

Marsh Posté le 22-08-2004 à 22:07:18    

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

Reply

Marsh Posté le 22-08-2004 à 22:21:56    

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!

Reply

Marsh Posté le 22-08-2004 à 22:24:05    

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.

Reply

Marsh Posté le 22-08-2004 à 22:25:47    

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

Reply

Marsh Posté le 22-08-2004 à 22:33:18    

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!
Reply

Marsh Posté le 22-08-2004 à 22:35:06    

non

Reply

Marsh Posté le 22-08-2004 à 22:35:36    

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

Reply

Marsh Posté le 22-08-2004 à 22:39:43    

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!

Reply

Marsh Posté le 22-08-2004 à 22:43:52    

mais quel est l'interet ?

Reply

Marsh Posté le 22-08-2004 à 22:43:52   

Reply

Marsh Posté le 22-08-2004 à 22:45:27    

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

Reply

Marsh Posté le 22-08-2004 à 22:47:02    

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!
Reply

Marsh Posté le 22-08-2004 à 22:48:21    

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

Reply

Marsh Posté le 22-08-2004 à 22:49:15    

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é

Reply

Marsh Posté le 22-08-2004 à 22:49:22    

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

Reply

Marsh Posté le 22-08-2004 à 22:52:39    

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?

Reply

Marsh Posté le 22-08-2004 à 22:54:00    

ta 2 fois une variable d !

Reply

Marsh Posté le 22-08-2004 à 22:54:13    

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

Reply

Marsh Posté le 22-08-2004 à 22:55:00    

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!
Reply

Marsh Posté le 22-08-2004 à 22:56:13    

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

Reply

Marsh Posté le 22-08-2004 à 22:56:37    

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???

Reply

Marsh Posté le 22-08-2004 à 22:57:42    

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

Reply

Marsh Posté le 22-08-2004 à 22:58:18    

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.

Reply

Marsh Posté le 22-08-2004 à 22:59:11    

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!
Reply

Marsh Posté le 22-08-2004 à 23:00:44    

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

Reply

Marsh Posté le 22-08-2004 à 23:05:02    

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 ...

Reply

Marsh Posté le 22-08-2004 à 23:07:29    

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;

Reply

Marsh Posté le 22-08-2004 à 23:09:37    

a ouai comme ca c'est pas mal

Reply

Marsh Posté le 22-08-2004 à 23:15:35    

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

Reply

Marsh Posté le 22-08-2004 à 23:18:33    

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:

Reply

Marsh Posté le 22-08-2004 à 23:19:12    

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.

Reply

Marsh Posté le 22-08-2004 à 23:19:34    

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

Reply

Marsh Posté le 22-08-2004 à 23:24:23    

Taz a écrit :

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


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

Reply

Marsh Posté le 22-08-2004 à 23:26:43    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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