petite question sur les classes - C++ - Programmation
Marsh Posté le 19-10-2002 à 14:42:24
Il faut faire un constructeur Complexe(int reel) qui te permet de construire un complexe qui vaut 0i+reel
Marsh Posté le 19-10-2002 à 14:44:21
Et puis il faut que ton opérateur + soit une fonction amie de ta classe.
Marsh Posté le 19-10-2002 à 14:47:17
merci pour la reponse je comprend bien comment ca marche, mais pour le mettre en application
Code :
|
Marsh Posté le 19-10-2002 à 15:39:56
red faction a écrit a écrit : friend ostream& operator <<(ostream& , const Complexe &); |
C'est le même principe :
friend Complexe& operator +(complexe& , const Complexe &);
Marsh Posté le 19-10-2002 à 18:08:37
kadreg a écrit a écrit : C'est le même principe : friend Complexe& operator +(complexe& , const Complexe &); |
marche pas help
: error C2678: binary '+' : no operator defined which takes a left-hand operand of type 'const int' (or there is no acceptable conversion)
jai essaye plein de truc mais ca veut pas aller
Marsh Posté le 19-10-2002 à 18:23:58
moins personnellement, j'évite les fonctions friend qui n'ont iren a voir dans la triperie de ma classe.
je préfère définir les opérations internes puis définir les opérations externes comme fonction "supérieures"
pour l'addition par exemple je fait
Code :
|
c'est à mon sens une bonne méthode qui permet de réutilsier un maximum de code et tres performante et ne privilégie pas l'un ou l'autres arguments.
ce prototype est erroné
friend Complexe& operator +(complexe& , const Complexe &);
veut dire que l'on va pouvoir l'invoquer de cette maniere
aComplex.operator+(bComplexe, cComplex), donc une addition à 3 arguments...
Marsh Posté le 19-10-2002 à 18:45:21
Taz@PPC a écrit a écrit : moins personnellement, j'évite les fonctions friend qui n'ont iren a voir dans la triperie de ma classe. je préfère définir les opérations internes puis définir les opérations externes comme fonction "supérieures" pour l'addition par exemple je fait
|
ok et pour empchere ca
Marsh Posté le 19-10-2002 à 19:09:19
deux tes 3 constructeurs tu peux n'en faire qu'un
Complex(int = 0, int = 0);
n'oublie pas le constructeur par recopie
Code :
|
ca veut dire que si tu fait
c1+c2
c2 est modififé!!!!
Marsh Posté le 19-10-2002 à 19:10:29
ok spa grave fait po attention je debute en c++ (c je connais deja bien)
sinon pour resoudre lerreur que jai a la compilation (en utilisant qd meme friend , je fait comment)
Marsh Posté le 19-10-2002 à 19:14:28
si tu ecris
5+c1
et que tu as complex(int) et operator(const complex &, const complex &), ton compialteur fait operator+(complex(5) c1)
la déclaration const & est imporante car complex(5) est un cosnt complex
Marsh Posté le 19-10-2002 à 20:00:41
Taz@PPC a écrit a écrit : ce prototype est erroné friend Complexe& operator +(complexe& , const Complexe &); veut dire que l'on va pouvoir l'invoquer de cette maniere aComplex.operator+(bComplexe, cComplex), donc une addition à 3 arguments... |
Ben il me semble que non. C'est un friend, pas un membre. Moi j'ai toujours fait comme ca pour les opérations de ce genre. Cependant, je reconnais que je n'ai jamais essayé d'invoquer des fonctions amies en tant que membre.
Marsh Posté le 19-10-2002 à 20:19:07
Code :
|
voila ou jen suis
Marsh Posté le 19-10-2002 à 20:28:15
Code :
|
ca c'est pas bon, ca fait du totu ce qu'on veut
Code :
|
ca encore moins. tu ferais mieux de réfléchir 5 sec a quoi correspond une addition (par exemple de 2 entiers) et l'affectation
essaye de voir comment fonctionne
int operator+(const int&, const int&); // 1+3, a+3, b+c
int & int::operator(const int &); // a+=3, b+=c
pense aussi a définir l'affectation
Marsh Posté le 19-10-2002 à 20:28:47
JE MERITE LE FOUET !!!!!!
C'est ma faute, je t'ai filé un opérateur d'addition entre deux complexes, ce n'est pas ce dont tu as besoin :
La déclaration dans la classe :
Code :
|
Marsh Posté le 19-10-2002 à 22:09:14
Taz@PPC a écrit a écrit :
|
ca marche pas en tout cas :
error C2804: binary 'operator +' has too many parameters
Marsh Posté le 19-10-2002 à 22:10:54
c'est pas en me donnant ce code d'erreur que ca va avancer. et tu me la fait pas a moi, c'est pas la première classe que je fais!
Code :
|
sympa ta version récursive!
deadloop daitectaid
Marsh Posté le 19-10-2002 à 22:14:58
Taz@PPC a écrit a écrit : c'est pas en me donnant ce code d'erreur que ca va avancer. et tu me la fait pas a moi, c'est pas la première classe que je fais!
|
je te rejette pas la faute , vu que c moi qui suis entrain dapprendre la , (et donc de faire les conneries ) , en tout cas il me met ce message derreur la qd je met la decalaration
int operator+(const int&, const int&);
Marsh Posté le 19-10-2002 à 22:15:04
je pars du principe que le constructeur par recopie fonctionne
Code :
|
Marsh Posté le 19-10-2002 à 22:16:28
Code :
|
tu es entrain de délcarer operator+ pour ta classe complexe, c'est normal ton compilateur est du mal.
tu lui définit operator+ en fonction de operator+. d'ou l'erreur
Marsh Posté le 19-10-2002 à 14:38:11
jai une classe complexe declaree comme ceci :
pour pouvoir ecrire c1 = c2 + c3, jai surdefini loperateur
mais comment faire pour que c1 = 5 + c2 fonctionne ?? (ce qui ajouterai 5 a la partie reele de c2 et affecterai le resultat a c1)
Message édité par red faction le 19-10-2002 à 14:48:27