IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

problème au surcharge d'opérateur =


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Par défaut problème au surcharge d'opérateur =
    Bonjour,
    j'ai une structure comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    class P
    public:
    	char* DataFile;
    	int nbter;
    	int nbser;
    	int nbf;
    	int nbgp;
    	vector<S *> ser;
    	vector<F *> f;
    	vector<T *> ter;
    	vector<G *> grp;
    	Cellule* cell;
    public:
    	P(char* df);
    	P(const Pe& p);
    	Properator=(const P &p);
    	virtual ~P();
     
    };
    Et j'ai défini l'opérateur= comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    P P::operator=(const P &p)
    {
    	     nbter=p.nbter;
    		nbsers=p.nbser;
    		nbf=p.nbf;
    		nbgp=p.nbgp;
    		cell=p.cell;
    	    ser.reserve(p.ser.size()); // optimize insertion
    	    ter.reserve(p.ter.size());
    	    grp.reserve(p.grp.size());
    	    f.reserve(p.f.size());
     
    	for (vector<S *>::const_iterator its = p.ser.begin();its != p.ser.end();its++)
    	 ser.push_back(new S(**its));
    	for (vector<F *>::const_iterator itf = p.f.begin();itf != p.f.end();itf++)
    	    f.push_back(new F(**itf));
    	.
            .
            .
        return *this;
    }
    Mais quand je declare 2 objet de type P: P a,b;
    je modifie a, après a=b; l'affectation ca se produit pas a reste différente de b
    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    P P::operator=(const P &p)
    {
    	     nbter=p.nbter;
    		nbsers=p.nbser;
    		nbf=p.nbf;
    		nbgp=p.nbgp;
    		//cell=p.cell;  //lol ,mark 
                             cell = new Cellule(*p.cell);
     
    	    ser.reserve(p.ser.size()); // optimize insertion
    	    ter.reserve(p.ter.size());
    	    grp.reserve(p.grp.size());
    	    f.reserve(p.f.size());
     
    	for (vector<S *>::const_iterator its = p.ser.begin();its != p.ser.end();its++)
    	 ser.push_back(new S(*its));//mark
    	for (vector<F *>::const_iterator itf = p.f.begin();itf != p.f.end();itf++)
    	    f.push_back(new F(*itf));//mark
    	.
            .
            .
       ///aussi pour DataFile....
        return *this;
    }

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    Comment savez-vous que a et b sont différents ?
    il faudrait aussi surcharger l'opérateur ==

  4. #4
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Il faudrait d'abord vider les vecteurs de l'objet destination avant de faire les push_back() et du coup vérifier qu'on ne fait pas une autoaffectation (a=a) car dans ce cas on perd tout.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Par défaut
    j'affiche leur contenu et je vois qu'ils ont le même contenu

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    et comment affiche-tu tes classes ?

    ça n'a rien d'évident à priori.

    D'autre part, vu ta métode de copie, les obets ne seront pas égaux puisque ter et grp ne sont pas alloué.

    de plus, tu fais une copie avec des vecteurs de pointeurs donc les pointeurs finaux seront différents...

    bref. Il faudrait nous dire qu'est-ce qui est différent et ne devrait pas l'être ainsi que comment tu constate cette différence .

Discussions similaires

  1. Problème de surcharge d'opérateur flux avec pointeur
    Par eleve_prog dans le forum Débuter
    Réponses: 4
    Dernier message: 18/04/2011, 18h41
  2. Problème de surcharge d'opérateur std::cout
    Par Nyko17 dans le forum C++
    Réponses: 14
    Dernier message: 28/04/2008, 13h01
  3. Réponses: 7
    Dernier message: 02/12/2007, 21h43
  4. Petit probléme de surcharge d'opérateur .
    Par Clad3 dans le forum C++
    Réponses: 20
    Dernier message: 11/04/2005, 20h15
  5. Problème de surcharge d'opérateurs
    Par Hell dans le forum C++
    Réponses: 17
    Dernier message: 17/01/2005, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo