[C++] Classe générique - Template

Bonjour,

je viens de terminer un exercice sur les Templates, et j'aurais besoin d'une vérification de mon code.

Après avoir lu le tutorial sur le site
http://www.derepas.com/csml/cours_systemc.html#SECTION00336000000000000000
je me suis lancé un nouvel exercice, reprenant à peu de choses près les données de l'exercice.

Je possède deux classes, l'une nommée Michelin, l'autre nommée Brigdestone.

Voici leurs définitions.

class Michelin
{
     private :
          double PressionDuPneu;
          static const double BASSE_PRESSION = 2.0;
          static const double MOYENNE_PRESSION = 2.5;
          static const double HAUTE_PRESSION = 3.0;

     public :
          Michelin( ): PressionDuPneu(0) { }
          void gonfler_BP( ) { PressionDuPneu = BASSE_PRESSION; }
          void gonfler_MP( ) { PressionDuPneu = MOYENNE_PRESSION; }
          void gonfler_HP( ) { PressionDuPneu = HAUTE_PRESSION; }
};


class Bridgestone
{
     private :
          double PressionDuPneu;
          static const double BASSE_PRESSION = 2.0;
          static const double MOYENNE_PRESSION = 2.5;
          static const double HAUTE_PRESSION = 3.0;

     public :
          Bridgestone( ): PressionDuPneu(0) { }
          void gonfler_BP( ) { PressionDuPneu = BASSE_PRESSION; }
          void gonfler_MP( ) { PressionDuPneu = MOYENNE_PRESSION; }
          void gonfler_HP( ) { PressionDuPneu = HAUTE_PRESSION; }
};


J'ai conçu une classe générique Voiture afin de monter une voiture avec n'importe quel type de pneu.
Y'a-t-il des erreurs dans le code ci-dessous ?

template <class Pneu> class Voiture
{
     public: 
          Voiture( ) { }
          void gonfler_BP_Pneu(int i) { mesPneus[i].gonfler_BP( ); }
          void gonfler_MP_Pneu(int i) { mesPneus[i].gonfler_MP( ); }
          void gonfler_MP_Pneu(int i) { mesPneus[i].gonfler_HP( ); }
     private:
          Pneu mesPneus[4];  // conserver les 4 pneus dans un tableau
};


Et pour l'instanciation des voitures dans le main( ), voici ce que j'obtiens :
int main( )
{
        // créer une voiture avec des pneus Michelin Haute Pression
        Voiture<Michelin> maVoiture( );       
        maVoiture.gonfler_MP_Pneu(3);             
        
        // créer une voiture avec des pneus Bridgestone Basse Pression
        Voiture<Brigestone> monAutreVoiture( );
        monAutreVoiture.gonfler_BP_Pneu(3);

        return 0;
}


Est-ce que tout ceci est correct ? Merci d'avance.

2 réponses

  1. Il y avait une erreur dans le tutorial, et je l'ai recopiée. Du coup, ça ne fonctionnait pas.

    Problème : refus de compilation.

    Voici les erreurs, ainsi que les corrections apportées :

    Voiture<Michelin> maVoiture( );
    -> Voiture<Michelin> maVoiture;

    Voiture<Bridgestone> monAutreVoiture( );
    -> Voiture<Bridgestone> monAutreVoiture;

    void gonfler_MP_Pneu(int i) { mesPneus[i].gonfler_HP( ); }
    -> void gonfler_HP_Pneu(int i) { mesPneus[i].gonfler_HP( ); }
    0
    1. Voici le code final.

      template <class Pneu> class Voiture
      {
           public: 
                Voiture( ) { }
                void gonfler_BP_Pneu(int i) { mesPneus[i].gonfler_BP( ); }
                void gonfler_MP_Pneu(int i) { mesPneus[i].gonfler_MP( ); }
                void gonfler_HP_Pneu(int i) { mesPneus[i].gonfler_HP( ); }
           private:
                Pneu mesPneus[4];  // conserver les 4 pneus dans un tableau
      };


      class Bridgestone
      {
           private :
                double PressionDuPneu;
                static const double BASSE_PRESSION = 2.0;
                static const double MOYENNE_PRESSION = 2.5;
                static const double HAUTE_PRESSION = 3.0;
      
           public :
                Bridgestone( ): PressionDuPneu(0) { }
                void gonfler_BP( ) { PressionDuPneu = BASSE_PRESSION; }
                void gonfler_MP( ) { PressionDuPneu = MOYENNE_PRESSION; }
                void gonfler_HP( ) { PressionDuPneu = HAUTE_PRESSION; }
      };


      class Michelin
      {
           private :
                double PressionDuPneu;
                static const double BASSE_PRESSION = 2.0;
                static const double MOYENNE_PRESSION = 2.5;
                static const double HAUTE_PRESSION = 3.0;
      
           public :
                Michelin( ): PressionDuPneu(0) { }
                void gonfler_BP( ) { PressionDuPneu = BASSE_PRESSION; }
                void gonfler_MP( ) { PressionDuPneu = MOYENNE_PRESSION; }
                void gonfler_HP( ) { PressionDuPneu = HAUTE_PRESSION; }
      };


      int main( )
      {
              // créer une voiture avec des pneus Michelin Haute Pression
              Voiture<Michelin> maVoiture;       
              maVoiture.gonfler_HP_Pneu(3);             
              
              // créer une voiture avec des pneus Bridgestone Basse Pression
              Voiture<Brigestone> monAutreVoiture;
              monAutreVoiture.gonfler_BP_Pneu(3);
      
              return 0;
      }
      0