Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthode constante

prototype?

Sujet résolu
    5 juin 2007 à 20:23:11

    Bonsoir a tous,

    M@theo dans la partie 2/2 sur les classes nous parle de méthode constante et declare
    le prototype de cette maniere:

    Citation : M@theo

    Oubliez pas de mettre à jour Arme.h avec le prototype aussi, qui sera le suivant :

    int Arme::getDegats() const;


    Je me demander simplement si on pouvait ecrire(comme les autre prototype):
    int getDegats() const;


    voila merci d'avance pour vos reponses.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      5 juin 2007 à 20:31:32

      Oui. C'est juste une fonction n'appartenant a aucune classe.
      • Partager sur Facebook
      • Partager sur Twitter
        5 juin 2007 à 20:45:16

        Salut Davidbrcz,

        Merci mais justement dans le cour, ce prototype appartient a la classe Arme et est declarer dans Arme.h, donc ma question etait de savoir si ca valait la peine de metre
        int Arme::
        avant du fait que c'etait un accesseurs ou si je pouvait comme n'importe quel prototype ecrire directement
        int getDegats() const;


        ca fonctionne de la deuxieme facon apparement mais je voulait etre sur pour ne pas prendre une mauvaise habitude.
        • Partager sur Facebook
        • Partager sur Twitter
          5 juin 2007 à 20:47:18

          Citation : Golderack

          int getDegats() const;



          ca fonctionne de la deuxieme facon apparement mais je voulait etre sur pour ne pas prendre une mauvaise habitude.



          Avec un prototype comme :
          int getDegats() const;

          Ta fonction sera dans l'espace global.

          Mais si tu déclare ton prototype avec un namespace, alors au moment de la définition, il faudra préciser ce namespace.
          • Partager sur Facebook
          • Partager sur Twitter
            5 juin 2007 à 21:02:12

            Merci Kevin, je suis pas sur de tout comprendre mais je vien de faire une decouverte !!

            en suivant le cour je me retrouve avec une classe Arme qui ressemble a ca:
            class Arme
            {
                public:

                Arme();
                Arme(int degats, std::string nom);
               
                void changer(int degats, std::string nom);
                void afficher();
               
                int Arme::getDegats() const;//c'est ca que je trouvait etrange !

                private:

                std::string m_nom;
               
                int m_degats;
            };


            mais en telechargeant le fichier que M@theo donne a la fin sa classe ressemble a ca:

            class Arme
            {
                public:

                Arme();
                Arme(std::string nom, int degats);
                void changer(std::string nom, int degats);
                void afficher();
                int getDegats() const;//ca me parait deja mieu comme ca !

                private:

                std::string m_nom;
                int m_degats;
            };


            donc ca doit etre une erreur dans le cour?
            • Partager sur Facebook
            • Partager sur Twitter
              5 juin 2007 à 21:19:26

              Ah OK, j'avais pas compris.

              Bah... Pour être honnête je ne sais pas si ça change quelque chose.

              Le fait que ton prototype soit inclus dans la déclaration de ta classe fait que ta méthode appartient obligatoirement à cette classe et n'est pas une fonction dans l'espace global.

              Quand à savoir si rajouter le namespace devant a un effet supplémentaire...
              • Partager sur Facebook
              • Partager sur Twitter
                5 juin 2007 à 22:03:14

                Il ne gène pas mais il ne sert à rien.

                Ca ne fait que alourdir la notation.
                • Partager sur Facebook
                • Partager sur Twitter
                Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                  5 juin 2007 à 22:52:40

                  Reprennons.
                  - const s'applique au type qui le précède dans la déclaration où il apparait. (quand il n'y a rien avant on inverse et on recommence)
                  - dans le cas particulier des fonctions membre [1], le type considéré est en fait celui de la classe dont la fonction est membre ; il affirme alors qu'un objet de cette classe ne sera pas altéré par un appel de sa fonction membre
                  - const n'a aucun sens pour les fonctions libres.

                  Concernant les déclarations dont le format est "type Classe::NomFonction(params) completements;" à l'intérieur des définitions de classes, c'est étrangement accepté par divers compilos. Je ne saurais dire si c'est normal ou pas -- j'ai la flemme de chercher ça dans la norme. C'est nécessaire pour les définitions de fonctions membre à l'extérieur de la définition de leur classe, mais certainement pas pour les déclarations de ces fonctions.

                  [1] Ca n'existe pas "méthode" en C++.
                  • 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.
                    6 juin 2007 à 8:17:04

                    Bonjour,

                    Merci pour vos reponses, je comprend deja mieu.

                    Citation : lmghs

                    [1] Ca n'existe pas "méthode" en C++.



                    D'accord, es que "attributs" existe ou faut-il mieu parler de "variables membres"?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 juin 2007 à 10:02:40

                      Disons qu'il n'y a pas d'ambiguités possibles sur le terme "attribut".

                      Dans les langages où l'on parle de méthodes, il s'agit (quasi?) systématiquement de fonctions membre virtuelles (le langage ne permettant pas les non-virtuelles) (j'ai un doute sur le Pascal objet, il y a beaucoup trop longtemps que je n'y ai plus touché). En UML, une méthode est l'implémentation d'une opération, ce qui en C++ correspondrait à la définition d'une fonction membre qui supplante une fonction membre virtuelle pure -- donc virtuelle.

                      Malgré tout, parler de "méthode" pour désigner une fonction membre est un abus de langage courant -- c'est comme "polymorphisme" qui est abusément utilisé à la place de "polymorphisme d'inclusion". Par contre, on n'emploiera jamais "méthode" pour désigner une fonction libre, d'où ma remarque -- bizarre j'avais lu un truc comme ça hier cela aurait été édité ?
                      • 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.
                        6 juin 2007 à 10:51:37

                        Citation : lmghs

                        on n'emploiera jamais "méthode" pour désigner une fonction libre, d'où ma remarque -- bizarre j'avais lu un truc comme ça hier cela aurait été édité ?



                        Je n'est rien editer, c'est peut etre a cause de mon premier poste ou
                        je parle de "méthode" sans préciser qu'elle etait a l'interieur de la classe.

                        Merci pour les explications.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Méthode constante

                        × 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