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++ Voir Introduction 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...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
[Gravure] Je n'arrive pas à graver un fichier de plus de 2 Go ! VoirLe problème Quand vous gravez un DVD, c'est généralement le format ISO-9660 qui est utilisé (que ce soit dans Nero ou tout autre logiciel de gravage). Or le format ISO-9660 ne supporte pas les fichiers de taille supérieure à 2 Go. Si vous...
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 ...
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...
Classe et instance d'objet VoirLa notion de classe On appelle classe la structure d'un objet, c'est-à-dire la déclaration de l'ensemble des entités qui composeront un objet. Un objet est donc « issu » d'une classe, c'est le produit qui sort d'un moule. En réalité on dit qu'un...
Les constructeurs et les destructeurs en langage C++ VoirLa notion de constructeur Le constructeur est la fonction membre appelée automatiquement lors de la création d'un objet (en statique ou en dynamique). Cette fonction membre est la première fonction membre à être exécutée, il s'agit donc d'une...

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
Collection CommentÇaMarche.net