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++ Discussion :

Est il possible instancier une classe avec un nom variable


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Est il possible instancier une classe avec un nom variable
    Salut à tous, je viens d'étudier le langage c++ et j'ai un mini projet dont je suis appeler à simuler une boite mail , j'ai plusieurs class dans le programme à savoir class Mail, class BoiteReception , class ElementsEnvoyes , class Compte , class ListeCompte .
    Pour vous expliquer mon problème , je suppose que je dois vous présentez la définition au moins des deux classes Compte et ListeCompte :

    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
    class Compte
    {
          string           Login ;
          string           Password ;
     
          vector < Contact > mes_contacts ;
     
       public:
              BoiteReception   Recu ;
              ElementsEnvoyes  Envoyes ;
              Compte ( string , string );
              Mail Nouveau_mail(string Dest , string objet, string continu); //
              void Envoi_mail ( string Dest , string objet, string continu, ListeCompte )   ;
              void Ajouter_contact ( string ad , string N_P="" , int Mob = 0 , string Descrip = "" ); //
              void Supprimer_contact ( string ); //
              bool Chercher_contact ( string );  //
              void ChangePassword( string, string , string );
              void Afficher (); //
              void putLogin(string);
              string getLogin();
              string getPassword();
     
    };
     
    class ListeCompte 
    {
     
           vector < Compte *> ListeDesComptes ;
     
          public :
     
                 ListeCompte();
     
     
                 void Ajouter_Compte ( Compte *);
                 Compte* Chercher_Compte ( string ) ;
                 void Afficher();
    };
    Au début lorsque j'ai conçu le programme , j'avais pas l'intention de manipuler des fichiers , maintenant j'ai un besoin , lors de la phase d'authentification , je vais supposer que les login et mots de passe de mes users sont stockés dans un fichiers , et puisque mon programme est conçu de manière à ce que tous les comptes mail existants doivent être stockés dans ma liste , donc au lancement du programme je dois lire les login et mots de passe du fichier , créer un nombre de Comptes ( pour moi inconnu ) avec les même paramètres récupérés du fichier , et c là que je suis bloqué , voici mon le code utilisé dans le 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
    ListeCompte Liste ;
    string login, passwd ;
     
    ifstream monFlux;
    monFlux.open("E:/C++/users.txt");
     
    if(monFlux.is_open())    //On teste si tout est OK.
      {
         vector <Compte *>::iterator it=Liste.ListeDesComptes.begin();
          while ( !monFlux.eof() )
          {
     
             monFlux >> login ;
             monFlux >> passwd ; 
             Compte  C ( login , passwd );  // c'est ici mon pb  :?
             Liste.Ajouter_Compte(&C);
     
     
     
     
     
          }           
     
    }
    monFlux.close();
    cout <<"Users List : " << endl;
    cout <<"------------" << endl;
    Liste.Afficher(); // la méthode Afficher ici afficher seulement le login de chaque Compte
     
     
    system("pause");   
     
    return 0;    
    }
    étant donné que le fichier contient :
    user1 1111
    user2 2222
    user3 3333


    Le programme m'affiche :
    Users Liste:
    ------------
    user3
    user3
    user3


    j'ai compris que dans la boucle while chaque fois que je crée la variable Compte C avec deux nouveaux paramètres , les anciennes valeurs seront donc écrasées et ce pour cela qu'au final je ne trouve dans ma liste que des comptes avec les derniers paramètres
    y a il une solution sans avoir à changer la structure de mes classes ??

    Merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Youpiiiiiiiiiiiiii j'ai trouvé la solution
    En fait la solution est d'allouer ma variable dynamiquement hihi , la modification suivante à résolu le pb :

    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
    if(monFlux.is_open())    //On teste si tout est OK.
      {
               while ( !monFlux.eof() )
          {
     
             monFlux >> login ;
             monFlux >> passwd ; 
             Compte * C ;
             C = new Compte(login,passwd);
             Liste.Ajouter_Compte(C) ;
     
     
     
          }           
     
    }
    monFlux.close();
    à bientôt dans un autre pb les amis

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Tu as surtout beaucoup de chances que ça n'ai pas planté.

    A quoi sert la classe ListeCompte ? Qu'apporte-t-elle de + qu'un conteneur + std::algo (Les algorithmes de la STL par r0d) ?

    Ensuite, un peu de lecture : Présentation des pointeurs intelligents en C++ par Loïc Joly.
    Ou pour le dire autrement, Compte et probablement Contact semblent être des sémantiques d'entité et devraient ne pas être copiables.

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

Discussions similaires

  1. Instancier une classe avec un arraylist et exception
    Par Chacha35 dans le forum Collection et Stream
    Réponses: 17
    Dernier message: 24/03/2010, 16h10
  2. Instancier une classe avec son nom
    Par Arrakis dans le forum Langage
    Réponses: 2
    Dernier message: 11/09/2009, 17h57
  3. [PHP 5.0] instancier une classe avec son nom dans une variable
    Par Nnay_ dans le forum Langage
    Réponses: 1
    Dernier message: 12/02/2009, 12h49
  4. Instancier une classe dont le nom est contenu dans une String
    Par fyque dans le forum Général Python
    Réponses: 15
    Dernier message: 13/06/2008, 12h33
  5. Instancier une classe dont le nom est une variable
    Par bendev dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 06h01

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