Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoyer une classe dans une fonction. Possible?

    27 janvier 2019 à 20:01:28

    Salut, je rencontre un (nouveau) soucis sur mon programme. J'aimerai savoir si il est possible d'envoyer une class dans une fonction. Par exemple:

    //main.cpp
    #include <main.h>
    #include <Personnage.h>
    #include ...
    int main()
    {
       Personnage player();//Creation de l'objet player de classe Personnage
       f_Arene(Personnage::player);//Envoie dans la fonction f_Arene un objet player de classe Personnage
    ]
    //main.h
     #include...
    
    
    void f_Arene(Personnage player)
    {
       std::cout << player.getVie();//La fonction getVie retourne la vie du Personnage
    }
    //J'utilise un cout pour verifier que la fonction a bien recue l'objet

    Autre possibilité:

    //main.cpp
    #include <main.h>
    #include <Personnage.h>
    #include ...
    int main()
    {
       Personnage player();//Creation de l'objet player de classe Personnage
       f_Arene();//Utilisation de f_Arene
    ]
    //main.h
    #include …
    void f_Arene()
    {
      std::cout << player.getVie;
    }

    Voila, j'espère que vous avez compris ce que je cherche a faire ^^. Si vous pouviez m'aider je serais tres reconnaissant, merci d'avance :p




     

    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2019 à 20:15:49

      Lu'!

      Changes de cours. Il apprend un sacré paquet d'âneries à ne pas faire, en plus de montrer des exemples de code buggés et d'être obsolète (quelques recherches sur le forum t'en diront plus). Prends plutôt le tutoriel disponible sur Zeste de Savoir. Ou encore le cours de C++ de @gbdivers, même s'il est encore en écriture il ne contient pas ce genre de bavures (et si tu as des problèmes de compréhension sur une partie et que ce n'est pas à cause d'un manque d'étude du cours, tu peux poster ici). Si tu préfères un cours déjà complet, tourne toi vers le C++ Primer de Lippman dans sa dernière édition (en anglais), il sera un poil moins à jour mais c'est un bon cours.

      Concernant ton code, ceci :

      Personnage player();

      ne crée PAS un objet "player". Cela déclare qu'il existe une fonction "player" qui ne reçoit aucun argument (), et renvoie un objet de type Personnage. Pour créer un objet :

      Personnage player ;
      // ou encore :
      Personnnage player {} ;
      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        27 janvier 2019 à 20:55:50

        Ok merci beaucoup pour tes conseils, je pense que j'irai sur le site de @gbdivers. Pour ce qu'il est des parenthèses dans le cours, i utilise des parenthèses, c'est ce qui ma trompé ^^. En effet j'avais déjà lu sur d'autre topic que le cours de c++ était bourre de faute, mais comme je l'ai voyez pas encore je ne changeais pas de cours, maintenant si:).

        Bref sinon a part ca, il reste toujours mon problème initial, peut-on envoyer un objet (ici player) dans une fonction ou juste utiliser une methode de la classe dans une fonction?

        • Partager sur Facebook
        • Partager sur Twitter
          28 janvier 2019 à 8:58:46

          MaelMathurin5 a écrit:

          Pour ce qu'il est des parenthèses dans le cours, i utilise des parenthèses, c'est ce qui ma trompé ^^.

          En fait c'est un peu plus subtil que ça, la syntaxe de C++ est un peu pourrie. Si tu as des paramètres à passer. Cela crée bien un objet :

          int x = 42 ;
          Personnage player(x);

          Ici, on crée bien un objet, parce que la présence du "x" nous indique bien que l'on n'a pas écris un prototype de fonction. En revanche, pour le cas où l'on ne transmet pas un paramètre C++ choisit de faire le "most vexing parse", c'est à dire de prendre systématiquement le cas qui va résoudre l'ambiguité de manière à te les briser.

          MaelMathurin5 a écrit:

          Bref sinon a part ca, il reste toujours mon problème initial, peut-on envoyer un objet (ici player) dans une fonction ou juste utiliser une methode de la classe dans une fonction?

          Oui, et comme n'importe quelle variable :

          class Machin{};
          
          void foo(Machin m){
          
          }
          
          int main(){
            Machin truc ;
            foo(truc);
          }

          En revanche, dans le cas de ton personnage, on est en face d'une classe à sémantique d'entité, on voudrait donc qu'elle soit non-copiable et non affectable par copie. Bref quelque chose comme :

          class Character {
          private:
            // on interdit copie et affectation par copie
            Character(Character const&) = delete ;
            Character& operator=(Character const&) = delete ;
          };

          Dès lors, la fonction ne peut plus prendre le personnage par valeur. On utilisera alors une référence (et potentiellement const) :

          void foo(Character& c){
            // c est modifiable
          }
          
          void bar(Character const& c){
            // c est constant
          }
          
          int main(){
            Character c ;
            foo(c);
            bar(c);
          }
          • Partager sur Facebook
          • Partager sur Twitter

          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

            28 janvier 2019 à 12:54:01

            Ok, merci beaucoup. Je n'ai pas mon pc sur moi actuellement je testerai tout cela ce soir, meme si je n'ai pas compris tout le code quand tu interdit la copie et l'affectation par copie. D'ailleurs est il obligatoire? Le code doit marcher sans non?

            Bref, merci beaucoup, je reposterai un message si je n'y arrive pas . A bientot (peut etre)

            • Partager sur Facebook
            • Partager sur Twitter
              28 janvier 2019 à 12:57:31

              MaelMathurin5 a écrit:

              Ok, merci beaucoup. Je n'ai pas mon pc sur moi actuellement je testerai tout cela ce soir, meme si je n'ai pas compris tout le code quand tu interdit la copie et l'affectation par copie. D'ailleurs est il obligatoire? Le code doit marcher sans non?

              Bien sûr qu'il marcherait sans. Mais le point est d'interdire cette opération parce qu'elle n'a pas de sens sur les classes entités. (Voir le lien que j'ai posté).

              • Partager sur Facebook
              • Partager sur Twitter

              Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

              Envoyer une classe dans une fonction. Possible?

              × 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