Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation des références et pointeurs

Anonyme
    31 mai 2008 à 13:07:04

    Salut à tous,
    après avoir eu un petit problème pour changer un attribut privé d'une classe à l'aide d'une fonction, on m'a dit qu'il faut utiliser un référence.
    Malheureusement, j'ai toujours autant de mal à savoir quand utiliser les références et également les pointeurs.
    Comment savez-vous quand est-li bon d'utiliser les pointeurs et références?
    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2008 à 13:17:57

      Quand tu manipules un gros objet, un std::vector par exemple. Afin de ne pas faire de copie, tu passes par pointeur ou référence.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        31 mai 2008 à 13:25:13

        Je ne connais pas cet objet, mais mon problème était tout bête :
        il fallait demander le nom d'un personnage (ce nom va être stocké dans un attribut privé via une fonction ) à l'user, mais j'y arrive pas...
        Comment avoir ce réflexe?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          31 mai 2008 à 13:26:43

          Une référence (ou un pointeur) permet de ne pas copier un objet tout en le transmettant à qqch/qqn. Ce qui fait des gains de temps (pas besoin de copier l'objet), et des économies de mémoire.

          Si tu veux "partager" un attribut d'une classe, sans pour autant autoriser sa modification d'une manière extérieure à la classe, retourne une référence objet constante, ou un pointeur constant ou une copie.
          class B;
          class A
          {
              B mon_b;
          
              public :
                  /// Par copie. Ce n'est pas forcement la meilleur solution.
                  B f(void) const // Le dernier const indique que la fonction f ne modifie pas les attributs de la classe A.
                  { return mon_b; }
          
                  /// Par référence constante.
                  const B& g(void) const
                  { return mon_b; }
          
                  /// Par pointeur constant.
                  const B* h(void) const
                  { return &mon_b; }
          };
          


          A noter que si tu as un objet de base (int, float, ... ) la référence ou le pointeur constant ne sont pas forcement supérieur à une copie.

          Si tu veux autoriser la modification extérieure, alors tu peux utiliser un pointeur, ou une référence. Ou mettre l'objet en public suivant comment.
          • Partager sur Facebook
          • Partager sur Twitter
            31 mai 2008 à 13:28:53

            tu utilises un pointeur pour les alloc dynamique comme sa tu sais l'adresse de l'objet et tu peut le supprimer.

            tu utilises les références pour des variables.

            moi je fait comme sa et sa marche super bien



            sinon si c'est un attribut privé (par exemple m_nom) et que tu est dans une classe tu a juste a faire

            class Personnage
            {
            std::string m_nom;
            
            public:
            void setNom(std::string nom)
            {
            m_nom = nom;
            }
            };
            



            enfin la c'est pas modulaire mais c'etait un exemple

            quand tu est dans une classe tu peut modifier ses attributs
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              31 mai 2008 à 14:01:50

              Tutoriel SFML > Éventuellement
              void Personnage::setNom(const std::string& nom);
              Pour ne pas copier inutilement nom.

              PS : c'est quoi ce pseudo o_O .
              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2008 à 14:12:14

                Citation : Hiura

                class B;
                class A
                {
                 // ...
                        const B* h(void) const
                        { return mon_b; }
                };
                


                Non, ça ne peut pas compiler. Il faut retourner l'adresse de mon_b ici (on n'est pas dans le cas d'une référence, mais d'un pointeur):

                const B* h(void) const
                { 
                   return &mon_b;
                }
                
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  31 mai 2008 à 14:46:44

                  Oui, pardon. (J'suis nase aujourd'hui >_< ) Corrigé.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mai 2008 à 16:27:22

                    ah ***** je me suis tromper de compte....

                    bon, en faite on fait un tutoriel sur la SFML avec Kreeg ...

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Utilisation des références et pointeurs

                    × 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