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

C++/CLI Discussion :

Probleme polymorphisme


Sujet :

C++/CLI

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 29
    Points
    29
    Par défaut Probleme polymorphisme
    Bonjour,

    j'ai un léger problème , j'ai d abords créé une classe CType qui regroupe les 3 types de bases que j'ai pris le soin de rédéfinir , le problème vient quand j'essaie d'utiliser cette classe dans une autre classe pour pouvoir construire une sorte de tableau avec string float int .
    Je vous met le code :

    de la classe CType
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <iostream>
    #include <sstream>
    #include <string>
     
    using namespace std;
     
    class CType {
     
        public:
     
            CType()
            {
            }
     
        virtual string toString()= 0;
    };
     
     
    class CString : public CType {
     
        private : string m_stringVal;
        public :
            CString(string p_stringVal)
            {
                m_stringVal = p_stringVal;
            }
     
            string toString()
            {
     
                return m_stringVal;
            }
    };
     
     
    class CInteger : public CType{
     
        private :
            int m_intVal;   
        public :
            CInteger(int p_intVal)
            {
                m_intVal = p_intVal;
            }
     
            string toString()
            {
                ostringstream out;
                out << m_intVal;
                return out.str();
            }
     
    };
     
    class CFloat : public CType{
     
        private : 
            float m_floatVal;
     
        public :
            CFloat(float p_floatVal)
            {
                m_floatVal = p_floatVal;
            }
     
            string toString()
            {
                ostringstream out;
                out << m_floatVal;
                return out.str();
            }
    };
    De ma classe CBuildData
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include "CType.h"
     
    //Gestion de la construction des données
    class CBuildData {
     
      private :
            CType *data[4];
            int taillemax;
            int cpt;
     
      public :
     
      CBuildData (int p_taille)
      {
            taillemax = p_taille;
        //    data = new CType[taillemax];
            cpt = 0;
      } 
     
     void addDataInteger(int p_data)
      {
            CInteger dataToAdd(p_data);
            if (cpt < taillemax )
            {
                data[cpt] = &dataToAdd;
                cpt++;
     
            }
     
      }
     
     void addDataFloat(float p_data)
      {
            CFloat dataToAdd(p_data);
            if (cpt < taillemax )
            {
                data[cpt] = &dataToAdd;
                cpt++;
     
            }
      }
     
      void addDataString(string p_data)
      {
            CString dataToAdd(p_data);
            if (cpt < taillemax )
            {
                data[cpt] = &dataToAdd;
                cpt++;
     
            }
      }
     
       void toPrint()
      {
            for (int i=0;i<cpt;i++)
            {
                cout << "Donnees " <<i<< " : " << data[i]->toString()<<endl;
            }
      } 
    };
    Et de mon main :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <cstdlib>
    #include <iostream>
    #include "CBuildData.h"
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
     
        //Test CType
        CInteger test(10);
        CString test2("bonjour");
        CFloat test3(9.5);
     
     
        CType *obj = &test;
        CType *obj2 = &test2;
        CType *obj3 = &test3;
     
        cout << "String : " << obj2->toString() << endl;
        cout << "Int : " << obj->toString() << endl ;
        cout << "Float : " << obj3->toString() << endl;
     
        //Test CBuildData
        CBuildData tryBuild(5);
        tryBuild.addDataInteger(5);
        tryBuild.addDataString("Bonjour");
        tryBuild.addDataFloat(9.5);
     
        tryBuild.toPrint();
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Les tests de CType marche avec succès le problème vient de la classe CBuildData lors de l'affichage , mon objet data de la classe CBuildData ne prend en compte que le 9.5 et l'affiche 2 fois alors qu'il devrait afficher successivement 5 , "Bonjour" , 9.5 .

    Merci de votre aide.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 59
    Points : 120
    Points
    120
    Par défaut
    Salut

    à vue de nez ton tableau pointe vers des variables locales, qui sont perdues quand on quitte les fonctions addData* , il faudra plutôt faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void addDataInteger(int p_data)
      {
            if (cpt < taillemax )
            {
                data[cpt] = new CInteger(p_data) ;
                cpt++;
            }
      }

Discussions similaires

  1. probleme template et polymorphisme
    Par thenewby dans le forum Langage
    Réponses: 9
    Dernier message: 16/07/2012, 16h48
  2. problem avec programme polymorphisme
    Par domxaline dans le forum Débuter avec Java
    Réponses: 15
    Dernier message: 05/02/2010, 15h25
  3. Réponses: 14
    Dernier message: 09/05/2006, 15h23
  4. probleme polymorphisme
    Par mikebranque dans le forum C++
    Réponses: 5
    Dernier message: 17/03/2006, 14h06
  5. Petit probleme de polymorphisme
    Par Lythaniel dans le forum C++
    Réponses: 5
    Dernier message: 06/03/2006, 18h27

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