Partage
  • Partager sur Facebook
  • Partager sur Twitter

Constructeur par copie pour quoi faire exactement ?

    1 avril 2008 à 20:33:30

    Bonjour tout le monde,

    J'ai fais une recherche sur "constructeur par copie" dans le tuto de matéo mais j'ai rien trouvé.

    Est-ce que Matéo aurait omis d'en parler dans le chapitre "constructeur" ?

    Si oui, quelqu'un pourrait m'expliquer cette technique svp ?

    Merci
    beegees
    • Partager sur Facebook
    • Partager sur Twitter
      1 avril 2008 à 20:39:57

      "de" copie ?
      Un chapitre entier est dédié à la duplication (par construction, seulement :() de classes responsables de ressources.
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        1 avril 2008 à 20:59:41

        Bonsoir

        Effectivement, je pense que tu l'as compris, le constructeur par copie, crée un objet à partir d'un autre.
        Je te montre avec une classe toute bête : un cercle on comprend toujours mieux avec des exemples :p
        Cette classe contient deux attributs on va dire, le rayon et le centre.

        //Constructeur d'un objet Cercle. Je passe l'objet Cercle en paramètres, en référence constante
        //Le prototype :
        1. Cercle(const Cercle &);


        //L'implémentation ;)
        1. Cercle::Cercle (const Cercle & C)
        2. {
        3.     rayon = C.rayon; //copie le rayon de C vers le rayon de (*this)
        4.     aire = C.aire;  //copie l'aire de C vers l'aire de (*this)
        5.     //Aucun retour de fonction puisque c'est un constructeur.
        6. }


        Tu as compris ?
        • Partager sur Facebook
        • Partager sur Twitter
          1 avril 2008 à 22:41:08

          Dans ce cas précis, il est maladroit de définir le constructeur de copie.
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
            1 avril 2008 à 22:51:42

            Oui, je sais bien, mais je voulais donner un petit exemple pas trop compliqué sans rentrer dans les alloc dynamiques et compagnie.

            Sinon, j'explique brièvement et simplement :

            Si un des champs de la classe est un pointeur, afin d'éviter le partage des données (mémoire) il est indispensable de définir le constructeur par copie et l'opérateur =.
            Le destructeur est obligatoire par la même occasion, car effectuera la libération de l'espace mémoire alloue dynamiquement (new)
            • Partager sur Facebook
            • Partager sur Twitter
              1 avril 2008 à 22:57:55

              Et si ta classe est tirée d'une hiérarchie, ne t'embête pas à définir les deux opérations de copie -- c'est compliqué à faire correctement, et 99% du temps dénué de tout sens et donc inutile. Contente-toi de les interdire.
              • Partager sur Facebook
              • Partager sur Twitter
              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                2 avril 2008 à 7:55:20

                Bonjour Azerty0, lmghs,

                Un super grand merci pour vos explications.

                En effet, je viens de trouver le chapitre (qui est séparé du chapitre sur les constructeurs).

                Merci Azerty0 pour ton explicaton qui est très claire.

                beegees
                • Partager sur Facebook
                • Partager sur Twitter

                Constructeur par copie pour quoi faire exactement ?

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown