Permuter class avec pointeur this

Résolu
sakjimh Messages postés 13 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 31 décembre 2007 - 29 déc. 2007 à 23:16
sakjimh Messages postés 13 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 31 décembre 2007 - 31 déc. 2007 à 23:40
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
29 déc. 2007 à 23:39
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++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 déc. 2007 à 17:03
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++ (@++)<!--
3
sakjimh Messages postés 13 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 31 décembre 2007
30 déc. 2007 à 22:26
oui merci pour l'explication mais y'a t'il une solution pratique pour se genre de probleme?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
31 déc. 2007 à 10:02
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
31 déc. 2007 à 11:28
Pour ma part j'aurais utilisé string à la place de char*, les chaines seront recopiés automatiquement

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
sakjimh Messages postés 13 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 31 décembre 2007
31 déc. 2007 à 23:40
merci les amis pour l'aide et l'explication!!
0
Rejoignez-nous