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
- Lien copie - Forum Android
- Copie cachée - Guide
- Lien copié - Forum Android
- Super copie - Télécharger - Gestion de fichiers
- Jeux java itel ✓ - Forum Jeux vidéo
2 réponses
Dalfab
Messages postés
703
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
1 mars 2023
100
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.