Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les classe Partie (1/2) - Question

Sujet résolu
    23 août 2017 à 15:28:30

    Bonjour, je commence à faire du C++ et je rencontre un problème vers le début du chapitre sur les classe partie 1.

    Le code affiché est celui-ci :

    class Personnage
    
    {
    
        // Méthodes
    
        void recevoirDegats(int nbDegats)
    
        {
    
    
    
        }
    
    
    
        void attaquer(Personnage &cible)
    
        {
    
    
    
        }
    
    
    
        void boirePotionDeVie(int quantitePotion)
    
        {
    
    
    
        }
    
    
    
        void changerArme(string nomNouvelleArme, int degatsNouvelleArme)
    
        {
    
    
    
        }
    
    
    
        bool estVivant()
    
        {
    
    
    
        }
    
    
    
        // Attributs
    
        int m_vie;
    
        int m_mana;
    
        string m_nomArme;
    
        int m_degatsArme;    
    
    };

    Voilà, à la méthode "attaquer" je ne comprend pas très bien à quoi le codeur fait appel...

    "(Personnage &cible)"

    Il fait appel à la classe Personnage et à la référence d'une variable cible ? Je n'ai pas très bien compris,

    merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      23 août 2017 à 15:35:03

      cible est une référence vers un personnage. Une reference permet de manipuler directement l'objet passé en parametre.

      Comme tu le vois il est possible de referencer la meme classe avec laquel on travail ( un personnage attaque bel et bien un autre personnage ).

      Ainsi ton personnage attaquant ( l'objet qui appele attaquer ) peux avoir acces aux fonctions de l'attaqué.

      Ainsi ta fonction attaquer ressemblerait a :

      void attaquer(Personnage &cible)
       
      {
       
          cible.recevoirDegats(m_degatsArme);
          // m_degatsArme appartient a l'objet appelant ( celui qui attaque )
       
      }



      • Partager sur Facebook
      • Partager sur Twitter
        23 août 2017 à 15:49:26

        Donc en gros cette méthode (pour l'instant sans ce qu'il y a à l'intérieur des accolades) dit :

        on attaque "cible" (enfin sa référence) de la classe personnage ? Cela veut dire que la classe personnage a un nom?

        Je suis un peu pommé :)

        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2017 à 16:06:07

          JeanKurz a écrit:

          Donc en gros cette méthode (pour l'instant sans ce qu'il y a à l'intérieur des accolades) dit :

          on attaque "cible" (enfin sa référence) de la classe personnage ? Cela veut dire que la classe personnage a un nom?

          Je suis un peu pommé :)


          comme nimporte quel variable , ta variable personnage a un nom. 

          int un_age = 10 // un entier nommé un_age
          
          Personnage le_hero = Personnage(...) // un Personnage nommé le_hero
          
          Personnage le_mechant = Personnage(...) // un Personnage nommé le_mechant
          
          le_hero.attaquer(le_mechant); // dans la fonction 'attaquer' , cible == le_mechant , il a ses attributs et les fonction appeler de cible auront un effet sur 'le_mechant'



          • Partager sur Facebook
          • Partager sur Twitter
            23 août 2017 à 16:09:45

            D'aaaaaccord ! Merci beaucoup ! C'est tout bête mais quand je n'arrive pas à un truc je me bloque et c'est la mort... :)

            Merci encore

            • Partager sur Facebook
            • Partager sur Twitter
              20 septembre 2017 à 17:04:00

              salut , je viens de commencer a faire du C++,

              et voila j'ai pas bien compris la methode d'attaquer que le codeur a fait 

              est ce que cela peut s'ecrire comme : attaquer (le_hero le_mechant) ?

              et merci beaucoup pour votre aide :D

              • Partager sur Facebook
              • Partager sur Twitter
                20 septembre 2017 à 17:47:31

                >est ce que cela peut s'ecrire comme : attaquer (le_hero le_mechant) ?

                Oui, mais, une méthode non statique a un argument "caché" : this.

                Donc, quand on conçoit une méthode non statique comme "attaquer", le sujet du verbe est implicitement "this".

                Ce n'est pas une obligation "syntaxique" du langage, mais une habitude.

                Donc pour une méthode non statique "attaquer", on l'appelle ainsi : lattaquant.attaquer(lacible).

                Dans le corps de la méthode "attaquer", "lattaquant" est accessible via l'argument "caché" this.

                On pourrait donc facilement convertir la méthode "void Personnage::attaquer( Personnage& cible)" en une fonction libre "void attaquer(Personnage& lattaquant, Personnage& lacible)". Cela n'est pas incompatible avec la POO, c'est juste que vous considérez que les objets de type "Personnage" n'ont pas à fournir le service "attaquer", ce qui peut facilement être le cas si vous voulez implémenter des attaques combinées de plusieurs attaquants, par exemple.

                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                  20 septembre 2017 à 19:04:04

                  d'accord :D

                  merci beaucoup pour toutes vos explications BACELAR :D

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Les classe Partie (1/2) - Question

                  × 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