Problème constructeur par copie
Résolu/Fermé
Hurobaki
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017
-
14 mai 2016 à 12:45
Hurobaki Messages postés 53 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 10 mars 2017 - 15 mai 2016 à 14:28
Hurobaki Messages postés 53 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 10 mars 2017 - 15 mai 2016 à 14:28
A voir également:
- Constructeur par copie java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Copie cachée - Guide
- Java apk - Télécharger - Langages
- Copie écran samsung - Guide
2 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
15 mai 2016 à 03:35
15 mai 2016 à 03:35
Bonjour,
Ton code est un impressionnant mélange de choses à ne pas faire.
Je te donne en exemple des fonctions manquantes.
Ton code est un impressionnant mélange de choses à ne pas faire.
- Tout d'abord, quand tu fait *t = *u, ce n'est pas le constructeur par copie qui est appelé mais l'opérateur de copie. Hors tu n'en as pas défini.
- A chaque pointeur initialisé par un new, un delete doit être associé. ni plus ni moins. Il manque des delete et il y des new de trop dans ton code.
- Les fonctions setDateofbirth() et setAdress() ne sont pas indiquées, elles sont des pièges avec ta structure.
- User n'a pas à manipuler les données de Person, il doit se servir de Person (et dans les constructeurs, il passe directement les paramètres à Person). Par exemple, le constructeur par copie de User n'utilise pas le constructeur par copie de Person, c'est une erreur.
- il y a ces erreurs dans tes fonctions, relis les bien.
Je te donne en exemple des fonctions manquantes.
User& User::operator=(const User& u) // operateur de copie de User { if ( &u != this ) { this.Person::operator=( u ); // copie de Person this->_password = u._password; this->_username = u._username; } return *this; } Person& Person::operator=( const Person& u ) // operateur de copie de Person { if ( &u != this ) { this->setFirstname( u.getFirstname() ); this->setLastname( u.getLastname() ); this->setDateofbirth( Date(u.getDateofbirth()) ); this->setAddress( Address(u.getAddress()) ); } return *this; } void Perso::setAddress( const Address& a ) { delete _adress; // detruire precedent si existe _adress = 0; // garantir un etat 'safe' avant un new _adress = new Adress( a->getNumber(), a->getPostal(), a->getStreet() ); } // Le constructeur corrigé de User qui utilise le constructeur de copie de Person User::User( const User& u ) : Person( u ) , _password(u.password) , _username(u._username) { }
Hurobaki
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017
15 mai 2016 à 14:28
15 mai 2016 à 14:28
Bonjour Dalfab,
Je te remercie pour ta réponse et pour toutes tes explications, je viens de tout lire et cela va m'être extrêmement utile ! Je n'ai pas encore beaucoup d'expérience en C++ et cela m'aide beaucoup de voir ce que je fais mal !
Je vais reprendre mon code en rectifiant mes erreurs et surtout en comprenant bien comment tu as fais.
Merci beaucoup, bonne journée.
Je te remercie pour ta réponse et pour toutes tes explications, je viens de tout lire et cela va m'être extrêmement utile ! Je n'ai pas encore beaucoup d'expérience en C++ et cela m'aide beaucoup de voir ce que je fais mal !
Je vais reprendre mon code en rectifiant mes erreurs et surtout en comprenant bien comment tu as fais.
Merci beaucoup, bonne journée.