Surchage opérateur de copie

cs_assoul Messages postés 4 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 28 décembre 2008 - 25 déc. 2008 à 17:53
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 - 29 déc. 2008 à 11:44
Bonjour,

Débutant en C++ je me trouve face à un problème.
Je dois réaliser un jeu de poker:
   tableJoueur représente l'ensemble des Joueurs (type vector<Joueur>)
   jeuEnCours représente les Joueurs dispo sur une partie (type vector<Joueur>)

Je cherche un faire une copie d'un vector:
copy(tableJoueur.begin(), tableJoueur.end(),jeuEnCours.begin());

J'obtiens bien une copie des Joeurs mais seuls les champs de type int et string sont copiés! Pour être plus clair si j'ai un joueur dans tableJoueur:

"Nom" "Prenom" "As pique, Roi coeur" "tapis=1000"
Lors de la copie il devient:

"Nom" "Prenom" "-1 pas de couleur, -1 pas de couleur" "tapis=1000"

Ou -1 pas de couleur est initialisé par un constructeur vide d'une main de jeu... La main de jeu n'est pas copiée mais recrée avec le constructeur MainDeJeu(void).
J'ai fait attention à surcharger les méthodes de copies:

MainDeJeu::MainDeJeu(

const MainDeJeu& m){MainDeJeu::carte1 = m.carte1;

MainDeJeu::carte2 = m.carte2;

}

Carte::Carte(

const Carte& c) {Carte::valeur = c.valeur;

Carte::couleur = c.couleur;

}

Joueur::Joueur(

const Joueur& j){Joueur::nom = j.nom;

Joueur::prenom = j.prenom;

Joueur::mainJoueur = j.mainJoueur;

Joueur::jeuPrincipal = j.jeuPrincipal;

Joueur::sommeTapis = j.sommeTapis;

}

Pourriez vous m'aider?

Merci d'avance.

3 réponses

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
26 déc. 2008 à 00:44
Bonsoir,
Tu devrais plutôt surcharger l'opérateur car MainDeJeu::carte1 m.carte1; ne fait pas appel au constructeur copie mais à l'opérateur =

const Carte& Carte::operator=(const Carte& c)
{
valeur = c.valeur;
couleur = c.couleur;

return *this;
}

Exemples :

Carte *pcarte = new Carte(carte1); // Constructeur copie

Carte carte2(carte1); // Constructeur copie

Carte carte1, carte2;carte2 carte1; // Opérateur

ed73
0
cs_assoul Messages postés 4 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 28 décembre 2008
28 déc. 2008 à 11:05
Merci beaucoup!
Je teste tout de suite
0
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
29 déc. 2008 à 11:44
Oui, ed73 a raison !  C'est ce que tu dois faire !
0
Rejoignez-nous