Comment retourner un objet ?

hentox Messages postés 2 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 14 juillet 2006 - 13 juil. 2006 à 17:34
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008 - 15 juil. 2006 à 12:23
Bonjour amis codeurs,

Je viens du monde Java et je tente de trouver mes repères. Je voudrais savoir si il est possible de retourner un objet. Exemple:

J'ai construis une classe "nbComplexe". Tout ce passe pour le mien jusqu'au moment ou je veux additioner deux nombres complexes. En java, ça donne ça :

public NbComplexe addition (NbComplexe nc){
        double re = this.reel + nc.reel;
        double im = this.imajine + nc.imajine;
       
        NbComplexe n = new NbComplexe (re, im);
       
        return n;
    }

Voila mon fichier nbComplexe.h

class nbComplexe {
   
    private:
        double re;
        double im;
   
    public:
        nbComplexe(double re, double im);
       
        double GetRe();
       
        void SetRe(double re);
       
        double GetIm();
       
        void SetIm(double im);
       
        //double * addition(nbComplexe * n1, nbComplexe * n2);
       
        nbComplexe addition(nbComplexe * n1, nbComplexe * n2);
       
        void affiche();

};   

Et le fichier nbComplexe.cpp
 

nbComplexe::nbComplexe(double re, double im){
    this->re = re;
    this->im = im;
}
       
double nbComplexe::GetRe(){
    return this->re;
}
       
void nbComplexe::SetRe(double re){
    this->re = re;
}
       
double nbComplexe::GetIm(){
    return this->im;
}
       
void nbComplexe::SetIm(double im){
    this->im = im;
}

/* double * nbComplexe::addition(nbComplexe * n1, nbComplexe * n2){
    double * tab = new double[2+1];
    tab[0] = n1->GetRe() + n2->GetRe();
    tab[1] = n1->GetIm() + n2->GetIm();
    return tab;
}*/

nbComplexe nbComplexe::addition(nbComplexe * n1, nbComplexe * n2){
    double re = n1->GetRe() + n2->GetRe();
    double im = n1->GetIm() + n2->GetIm();
    nbComplexe * n3 = new nbComplexe(re, im);
    return * n3;
}

       
void nbComplexe::affiche(){
    cout << this->GetRe() << " +j "<< this->GetIm() << endl;
}

P.S. : je n'ai volontairement pas mis les differents #include mais ils sont bien presents

3 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
13 juil. 2006 à 19:48
Il manque des const et l'usage de références est conseillé plutot que
de mettre l'adresse dans un pointeur. Pour une addition si aucune des
deux opérande n'est modifiable tu dois retourner une copie. La
bibliotheque standard fournie std::complex qui est tres simple à
utiliser grace a la surcharge des opérateurs arithmetiques.
0
hentox Messages postés 2 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 14 juillet 2006
14 juil. 2006 à 16:28
Je te remercie pour tes indications. Je vais essayer et je te tiens au courant.
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
15 juil. 2006 à 12:23
Si je ne me trompe, c'est un exercisse du livre "Le langage c++" de Bjarne Stroustrup






    nbComplexe * n3 = new nbComplexe(re, im);
    return * n3;
---> Pourquoi passer par un pointeur pour ensuite retourner du statique ?

Enfin quoi qu'il arrive c'est tout a fait possible de retourner un objet avec return.

Bonne journée
0
Rejoignez-nous