Rechercher : dans
Par :

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

Dernière réponse le 14 jun 2009 à 17:07:22 CQFD, le 14 jun 2009 à 15:44:56 
 Signaler ce message aux modérateurs

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#SECTION003360­00000000000000
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.

Meilleures réponses pour « [C++] Classe générique Template » dans :
Les templates en C++ VoirIntroduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Générer des nombres aléatoires efficacement avec rand() VoirGénérer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
Les classes en langage C++ VoirLa notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...
Les structures en langage C++ VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les objets en langage C++ VoirLa création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...

1

CQFD, le 14 jun 2009 à 17:04:57

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( ); }

Répondre à CQFD

2

 CQFD, le 14 jun 2009 à 17:07:22

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;
}

Répondre à CQFD