petitavion414
Messages postés8Date d'inscriptiondimanche 22 octobre 2006StatutMembreDernière intervention10 novembre 2006
-
26 oct. 2006 à 12:29
mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 2010
-
26 oct. 2006 à 13:24
Bonjour à tous... Voilà j'ai un petit problème. J'ai crée une classe complex dans laquelle j'ai defini quelques méthodes. Jusqu'ici rien de bien passionnant....
Cependant des que j'utilise une méthode qui prend un objet de cette même classe comme argument, l'execution appel le destructeur juste avant l'execution de la méthode...
Je vous montre un petit exemple:
++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++
complex.H:
#include
using namespace std;
class complex
{
double real_part;
double imaginary_part;
// Friend function :
friend void module(complex a,double &mod);
public :
// Constructor
complex();
complex(double a, bool b);
complex(double a, double b);
complex (const complex &source_complex); // copy constructor
des que j'appel par exemple la fonction module, le destructeur est appelé (je le sais car j'ai demandé qu'il affiche une phrase des qu'il est appelé...)
j'obtiens
+++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++
MAIN
2 + i*3
The complex number was destroyed <- juste avant module le destructeur
3.60555 <- appel de la function module
The complex number was destroyed
The complex number was destroyed
The complex number was destroyed
The complex number was destroyed
The complex number was destroyed
mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 20103 26 oct. 2006 à 12:52
Salut,
Ta méthode module fait appel en parametre a un complex nommé a:
friend void module(complex a,double &mod);
Lorque tu appel module la variable a est allouer et construite "par copie" du parametre que tu lui donne
Donc lorsque l'instruction est terminé, la variable complex a est local a la fonction module, elle est détruite avant que tu n'affiche le resultat "mod".
De manière générale, il ffaut définir cette forme au minimum si tu ne veux pas de surprise d'allocation/desallocation hasardeuse.
De plus, passe ta classe en parametre "reference constante" quelquesoit
tes méthodes, ces moins lourd à gérer et évite les
aloocations/desallocations de parametres (quand ce n'est pas natif)
D'autre part, je te conseille de créer une méthode pour obtenir le module de ton complex (c'est un conseil)