Partage
  • Partager sur Facebook
  • Partager sur Twitter

Enseignement de static (pour les membres)

    29 mai 2020 à 18:52:13

    Dans un autre fil Michel disait

    > La (mauvaise) idée d'utiliser un compteur statique vous a été AIMABLEMENT suggérée par le (très mauvais) exemple qui sert souvent d'introduction à la notion de membre statique, à savoir

    Ah! Mes slides ont toujours ce fichu compteur faute d'avoir trouvé un exemple pertinent et non abstrait. C'est une de mes grande frustration d'ailleurs.

    Chers amis, vous utilisez quoi comme exemple pour présenter static (relatif aux membres) à vos apprenants?

    • 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.
      29 mai 2020 à 21:01:52

      Pour déclarer des constantes de ce type.

      Analogie avec les énumérations de java, si tu vois. 

      Version longue : en java les membres d'une enumération ne sont pas des entiers déguisés, mais des (références) à des objets créés au départ. Ils sont dans la classe (publics et statics), et crées  au demarrage par le constructeur qui est privé.

      Exemple quand j'aurai autre chose qu'un clavier de smartphone.

      Que voili : les 4 directions.

      #include <iostream>
      
      //
      // Definition
      //
      class Direction
      {
          int m_numero;
          Direction(int numero); // yes, constructor is private.
      
      public:
          Direction next() const;
          std::string name() const;
      
      public:
          static Direction NORTH, EAST, SOUTH, WEST;
          static Direction every[4];
      };
      
      //
      // Implementation
      //
      Direction::Direction(int numero)
          : m_numero{numero}
      {
      }
      
      Direction Direction::next() const
      {
          return {(m_numero + 1) % 4};
      }
      
      std::string Direction::name() const
      {
          static std::string names[] = {
              "North",
              "East",
              "South",
              "West",
          };
          return names[m_numero];
      }
      
      Direction 
          Direction::NORTH{0},
          Direction::EAST{1},
          Direction::SOUTH{2},
          Direction::WEST{3};
      
      Direction Direction::every[] = {
          NORTH,
          EAST,
          SOUTH,
          WEST,
      };
      
      //
      // use
      //
      
      int main()
      {
          std::cout << "* Foreach loop" << std::endl;
          for (auto d : Direction::every)
          {
              std::cout << d.name() << std::endl;
          }
      
          std::cout << "* Loop with next" << std::endl;
          Direction dir = Direction::NORTH;
          for (int i = 0; i < 10; i++)
          {
              std::cout << i << ". " << dir.name() << std::endl;
              dir = dir.next();
          }
      }
      


      Résultat :

      * Foreach loop
      North
      East
      South
      West
      * Loop with next
      0. North
      1. East
      2. South
      3. West
      4. North
      5. East
      6. South
      7. West
      8. North
      9. East



      -
      Edité par michelbillaud 30 mai 2020 à 10:56:02

      • Partager sur Facebook
      • Partager sur Twitter

      Enseignement de static (pour les membres)

      × 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