Permuter class avec pointeur this

[Résolu]
Signaler
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007
-
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007
-
salut,
j'ai creer une classe "personne" (voir si dessous) et une methode qui permute deux personne mais le resultat reste incorrecte malgré que j'ai bien mis un passage par parametre pouvez vous m'expliquer le probleme
merci;

class personne
{
private:
    char* nom;
    char* prenom;
    Date dn;
public:
    personne()
    {
        nom=new char[20];
        prenom=new char[20];
    }
    ~personne()
    {
        delete[] nom;
        delete[] prenom;
    }
    void saisir();
    void afficher();
    void permuter(personne&);
    bool comparer(personne);

};

void personne::permuter(personne& x)
{
    personne aux;
    aux=x;
    x=*this;
    *this=aux;
}

6 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
aux=x;
appel au constructeur de copie.
nom et prenom de aux pointe sur le nom et prenom de x
*this=aux;
appel au constructeur de copie. Les pointeurs de ta classe pointe maintenant à la même place que ceux de aux, c'est à dire, sur les zones mémoire de x.

}

appel du destructeur.
On supprime la mémoire des pointeur nom et prenom de aux. Ce sont les zones mémoire de x et ceux sur lesquels pointe les pointeur de ta classe aussi.
Résultat, ta classe plus x ne pointe sur plus rien de valide.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ben moi j'aurais fais:
void personne::permuter(personne& x)
{
    char *tmp = x.nom;    x.nom nom; nom tmp;
    tmp = x.prenom;    x.prenom prenom; prenom tmp;
}

Je n'est pas tenue compte de Date volontairement, car j'ignore ce que c'est.

C++ (@++)<!--
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007

oui merci pour l'explication mais y'a t'il une solution pratique pour se genre de probleme?
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Pour ma part j'aurai surcharger l'opérateur "=" puis dans le main je me serai déclaré une variable "Personne * temp = new Personne();" qui m'aurait permis de faire la permutation.

Shell
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Pour ma part j'aurais utilisé string à la place de char*, les chaines seront recopiés automatiquement

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007

merci les amis pour l'aide et l'explication!!