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 :

constructeur de copie (class Liste)


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut constructeur de copie (class Liste)
    bonjour,
    je créé une class Liste qui construit une liste chainée. Je suis amené à créer un constructeur de copie. Comment ça se déclare ? Dois-je créer une nouvelle liste avec mon constructeur "normal" puis copier chaque elt de la liste à copier dans cette nouvelle liste ? Si oui, cette nouvelle liste ne doit-elle pas etre la liste courante (this) ?

    merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut
    juste une autre question : j'ai fait un constructeur de copie et je voudrais le tester... comment dois-je faire pour cela ?

    mon constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Liste::Liste(Liste& liste) {
         int size = liste.size();
         if (size != 0){
            Liste::iterator courant = liste.begin();
     
            //recopie element par element
            while (liste.end() != courant){
                this->push_back(*courant);
                ++courant;
            }
        }
    }
    merci

  3. #3
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par crischprolch
    Comment ça se déclare ?
    Comme tu veux, surcharge de '=', méthode Copy, ...

    Citation Envoyé par crischprolch
    Dois-je créer une nouvelle liste avec mon constructeur "normal" puis copier chaque elt de la liste à copier dans cette nouvelle liste ?
    Oui, logique non ?

    Citation Envoyé par crischprolch
    Si oui, cette nouvelle liste ne doit-elle pas etre la liste courante (this) ?
    ?
    L'itération est humaine; la récursion, divine.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut
    en fait je me pose la question :
    " Si oui, cette nouvelle liste ne doit-elle pas etre la liste courante (this) ?" car si je créé une nouvelle liste puis copie dedans elt par elt, comment je fais pour dire que c'est la liste courante ?

  5. #5
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par crischprolch
    en fait je me pose la question :
    " Si oui, cette nouvelle liste ne doit-elle pas etre la liste courante (this) ?" car si je créé une nouvelle liste puis copie dedans elt par elt, comment je fais pour dire que c'est la liste courante ?
    Liste courante de quoi ? tu peux peut-être expliquer le contexte.
    L'itération est humaine; la récursion, divine.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut
    en fait je ne sais pas trop à quoi sert un constructeur de copie. Pour moi, ça prend une Liste en paramètre et ça la copie mais le problème, c'est que je ne sais pas dans quoi ça doit faire la copie.

  7. #7
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par crischprolch
    en fait je ne sais pas trop à quoi sert un constructeur de copie. Pour moi, ça prend une Liste en paramètre et ça la copie mais le problème, c'est que je ne sais pas dans quoi ça doit faire la copie.
    Il copie les membres d'une classe vers une autre classe (de même type).
    L'itération est humaine; la récursion, divine.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Comme tu l'as (presque) deviné, un constructeur par copie s'écrit comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Liste::Liste(const Liste& liste)
    {
        ...
    }
    Il sert à construire un objet Liste à partir d'un autre objet Liste. Donc par exemple comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Liste A;
    Liste B(A); // Appelle du constructeur par copie pour construire B à partir de A
    A part ça, ta classe Liste est un clone de std::list, pourquoi ne pas utiliser directement cette dernière ?

Discussions similaires

  1. Réponses: 24
    Dernier message: 08/05/2008, 17h30
  2. Problème constructeur par copie listes chainées
    Par Nicoclem dans le forum C++
    Réponses: 4
    Dernier message: 10/04/2008, 11h44
  3. Réponses: 5
    Dernier message: 03/12/2006, 15h55
  4. Constructeur par copie et std::list
    Par Captain_JS dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/12/2005, 19h15
  5. Réponses: 3
    Dernier message: 24/04/2005, 14h19

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