Comment retourner un objet ?

Signaler
Messages postés
2
Date d'inscription
lundi 3 juillet 2006
Statut
Membre
Dernière intervention
14 juillet 2006
-
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008
-
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

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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.
Messages postés
2
Date d'inscription
lundi 3 juillet 2006
Statut
Membre
Dernière intervention
14 juillet 2006

Je te remercie pour tes indications. Je vais essayer et je te tiens au courant.
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

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