IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

classe Template et méthodes "générales"


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut classe Template et méthodes "générales"
    Bonjour à tous,

    Alors voici mon problème. J'ai défini dans une première librairie des classes RATIONAL et COMPLEX qui viennent compléter les types standards unsigned int, int, et double. Dans les classes RATIONAL et COMPLEX j'ai défini des méthodes publiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    STRING COMPLEX::SHOW(STRING buffer) const
    pour l'affichage. Jusque là tout va bien.

    Ensuite j'ai créer une classe template MATRIX, avec là encore une méthode pour l'affichage de la matrice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    template<class T>
    char *MATRIX<T>::SHOW(char *buffer) const
    {
    	unsigned int i, j;
    	char buffer_aux[50];
     
    	strcpy(buffer, "");
     
    	for(i=0;i<L;i++)
    	{
    		for(j=0;j<C;j++)
    		{
    			strcat(buffer, (*this)(i,j).SHOW(buffer_aux));
    			strcat(buffer, "\t");
    		}
    		strcat(buffer, "\n");
    	}
     
    	return buffer;
    }
    qui fait implicitement appel aux méthodes d'affichage SHOW du type utilisé dans la matrice (à savoir RATIONAL, COMPLEX, int, double ...). Cependant la méthode SHOW n'existe que pour les classes que j'ai créées à savoir RATIONAL et COMPLEX. En effet pas il n'y a pas de méthodes publiques SHOW associées aux types int ou double par exemple... Alors certes je peux (ce que j'ai fait jusqu'alors) considérer les cas particuliers de l'affichage des type standards comme int ou double en faisant des méthodes spécifiques à ces types dans la classe template MATRIX...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *MATRIX<unsigned int>::SHOW(char *buffer) const;
    char *MATRIX<int>::SHOW(char *buffer) const;
    char *MATRIX<double>::SHOW(char *buffer) const;
    Mais je me demandais s'il n'aurait pas été possible d'associer des méthodes SHOW() aux types double ou int sans pour autant recréer toute une classe associée à un type standard ??

    Merci par avance pour vos réponses.

    PS : D'autre part j'aurais une autre question purement technique... je compilais jusqu'alors mon code avec une version un peu ancienne (1 an à peu près) de g++ et je m'aperçois que de nouvelles erreurs sont détectées (notamment dans la déclaration et l'implémentation de classes Template filles) quand je recompile ce même code avec la version 3.4.2 de ce même compilateur... Si quelqu'un à une explication ... merci de votre aide !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La méthode typique pour implémenter la conversion en chaîne d'une classe, est de surcharger l'opérateur << entre un ostream et cette classe. C'est ce qui est fait pour tous les types de base, et quelques types standards (string par exemple).

    Donc remplace ta fonction SHOW par cette surcharge, et tu pourras gérer de manière homogène tout type de donnée.

    Par ailleurs, les char* c'est mal.

    http://c.developpez.com/faq/cpp/?page=strings

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    template<class T>
    std::ostream& operator << (std::ostream& os, const MATRIX<T>& m)
    {
       for(unsigned int i=0;i<L;i++)
       {
          for(unsigned int j=0;j<C;j++)
          {
             os << m(i, j) << "\t";
          }
          os << "\n";
       }
     
       return os;
    }
    En ce qui concerne ta seconde question... Quelles sont ces erreurs ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Définition de méthodes pour une classe template
    Par Pragmateek dans le forum Langage
    Réponses: 13
    Dernier message: 20/12/2008, 00h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo