Partage
  • Partager sur Facebook
  • Partager sur Twitter

manipulation des tableaux vector OOP

    5 août 2019 à 6:43:12

    Bonjour , j'ai une question à propos les tableaux dynamiques ! 

    j'ai un tableau dynamique de type Exemplaire* ( classe )  il contient des pointeurs comme il est indiqué dans le code ; je veux afficher les exemplaires ayant une langue donné , sachant que la langue est un attribut de la classe exemplaire ! 

    class Bibliotheque{
    private:
    
        vector<Exemplaire*> exemplaire;
    string name ;
    public:
        Bibliotheque(string testnom):name(testnom)
        {
            cout<< "La bibliothèque" <<name<< "est ouverte !"<<endl;
        }
    string getNom(){
    return name;
    }
    
    void stocker(Oeuvre &o  )
    { Exemplaire* ex=new Exemplaire(o);
          exemplaire.push_back(ex);
    }
    void stocker(Oeuvre &o , int n )
    { Exemplaire* ex=new Exemplaire(o);
         for (int i=0;i<n;i++) {exemplaire.push_back(ex);
    }}
    void lister_exemplaires ()
    {
    
    for(int i=0;i<exemplaire.size();i++) {
    exemplaire[i]->Afficher();
    
    }
    }
    void lister_exemplaires(string langue)
    {
    cout<<endl;
    }
    
    ~Bibliotheque(){
    cout<<"La bibliothèque "<<name<<" ferme ses portes,et détruit ses exemplaires :"<<endl;
    }
    
    
    
    
    
    };
    
    


     

    -
    Edité par MohamedSoheib 5 août 2019 à 6:43:36

    • Partager sur Facebook
    • Partager sur Twitter
      5 août 2019 à 8:08:23

      Il faut ajouter un test

      SI LA LANGUE DE L'EXEMPLAIRE NUMERO I EST LA BONNE

             alors l'afficher

      • Partager sur Facebook
      • Partager sur Twitter
        5 août 2019 à 8:17:03

        michelbillaud a écrit:

        Il faut ajouter un test

        SI LA LANGUE DE L'EXEMPLAIRE NUMERO I EST LA BONNE

               alors l'afficher


        mais comment le faire ! sachant que mon  main est : 

         const string langue("anglais");
          cout << " Les exemplaires en "<< langue << " sont :" << endl;
          biblio.lister_exemplaires(langue);
        • Partager sur Facebook
        • Partager sur Twitter
          5 août 2019 à 8:41:07

          Si tu as pu écrire le code que tu nous montres, je ne vois pas ce qui peut t'arrêter.

          Tu sais apparemment  faire une boucle sur tous les exemplaires. 

          Ps : le constructeur et le destructeur ne sont pas la pour faire joli et afficher des messages, mais pour allouer et libérer des ressources.

          -
          Edité par michelbillaud 5 août 2019 à 8:41:53

          • Partager sur Facebook
          • Partager sur Twitter
            5 août 2019 à 9:27:46

            michelbillaud a écrit:

            Si tu as pu écrire le code que tu nous montres, je ne vois pas ce qui peut t'arrêter.

            Tu sais apparemment  faire une boucle sur tous les exemplaires. 

            Ps : le constructeur et le destructeur ne sont pas la pour faire joli et afficher des messages, mais pour allouer et libérer des ressources.

            -
            Edité par michelbillaud il y a 43 minutes


            je n'ai pas pu accéder au exemplaire et comparer leur langue avec la langué d'entrée ( anglais par exemple) ;

            ps: oui j'ai oublié de libérer l'espace alloué avec delete dans le destructeur .

            • Partager sur Facebook
            • Partager sur Twitter
              5 août 2019 à 14:03:37

              Si tu ne peux pas comparer, il n'y a pas de solution.

              • Partager sur Facebook
              • Partager sur Twitter
                7 août 2019 à 9:18:16

                Hello,

                Pourquoi ne pas utiliser une map avec comme key les langues, et comme values les exemplaires ?

                • Partager sur Facebook
                • Partager sur Twitter

                Si ça n'explose pas, alors ce n'est pas intéressant.

                  7 août 2019 à 10:30:02

                  MaximeB25 a écrit:

                  Hello,

                  Pourquoi ne pas utiliser une map avec comme key les langues, et comme values les exemplaires ?


                  D'abord, ça ne marcherait pas. Pour une langue, il peut y avoir PLUSIEURS exemplaires.  Pour indexer par langue, ça  serait plutôt une multimap, une map dont les values sont des ensembles d'exemplaires.

                  Ensuite rien ne dit que l'indexation par langue soit l'opération la plus fréquente. Ce n'est peut être pas judicieux de faire une fixette la dessus pour le choix de la structure de données.

                  Sur le plan pédagogique, c'est un simple exercice de parcours de tableau + indirection + sélection par accesseur.  L'OP a déjà du mal avec ça (pas compris qu'il lui fallait un moyen de connaitre la langue d'un exemplaire), pas la peine d'aller taper dans des structures de données plus complexes, c'est vraiment pas le moment.

                  Déjà, la boucle "foreach" sur un vector est inconnue au  bataillon. Et avec la construction d'une copie pendant l'ajout, on yoyotte joyeusement entre sémantiques de valeur et d'entité.

                  Je m'étonne de ne pas avoir entendu "smart pointer". Il y a du relâchement pendant les vacances.

                  -
                  Edité par michelbillaud 7 août 2019 à 10:34:38

                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 août 2019 à 18:01:09

                    Bonjour !

                    je n'ai pas encore trouvé la solution !

                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 août 2019 à 21:29:28

                      Et la classe Exemplaire, elle est comment ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 août 2019 à 4:25:26

                        michelbillaud a écrit:

                        Et la classe Exemplaire, elle est comment ?


                        class Exemplaire {
                        private:
                            Oeuvre oeuvre ;
                        public:
                            Exemplaire( Oeuvre const& autre):oeuvre(autre)
                            {
                             cout<<"Nouvel exemplaire de : "<<oeuvre.getTitre()<< " , " << oeuvre.getAuteur() << ", en " << oeuvre.getLangue() <<endl;
                            }
                            Exemplaire(Exemplaire const& autre ):oeuvre(autre.oeuvre)
                            {
                                cout << "Copie d’un exemplaire de :" <<oeuvre.getTitre()<< " , " << oeuvre.getAuteur() <<", en " << oeuvre.getLangue() <<endl;
                            }
                            ~Exemplaire()
                            {
                              cout << "Un exemplaire de " <<oeuvre.getTitre() << " , " << oeuvre.getAuteur() <<" , en " << oeuvre.getLangue()<< " a été jeté !" <<endl;
                            }
                            Oeuvre getOeuvre()
                            {
                                return oeuvre;
                            }
                            void Afficher()
                            {
                              cout<< "Exemplaire de : " << oeuvre.getTitre()<<" , " <<oeuvre.getAuteur()<<" , en " <<oeuvre.getLangue()<<endl ;
                            }
                        };


                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 août 2019 à 8:31:01

                          La langue d'un exemplaire, ce n'est pas la même que celle de l'oeuvre par hasard ?

                          -
                          Edité par michelbillaud 8 août 2019 à 8:31:38

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 août 2019 à 9:04:34

                            michelbillaud a écrit:

                            La langue d'un exemplaire, ce n'est pas la même que celle de l'oeuvre par hasard ?

                            -
                            Edité par michelbillaud il y a 32 minutes


                            oui ! mais comme j'avais dit , je ne sait pas comment accéder aux élément du tableau dynamique cad : comment verifier la langue des exemplaires de toutes les cases si elle est identique a celle de mon argument !

                            -
                            Edité par MohamedSoheib 8 août 2019 à 9:07:49

                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 août 2019 à 10:29:40

                              Pourquoi "oui mais" ?

                              En c++ on accède aux éléments d'un vector  comme à ceux d'un tableau, avec des indices entre crochets.

                              Si tu avais un exemplaire dans une variable e, tu ferais comment pour déterminer sa langue ?

                              Exemplaire e;
                              
                              cout  << "langue = " << .... ???

                              Ps : tu perdrais moins de temps en revoyant ton cours. La ça fait trois jours que tu travailles intensément  jour et nuit sur cette question, alors qu'il te faudrait 2 minutes. 

                              -
                              Edité par michelbillaud 8 août 2019 à 10:33:16

                              • Partager sur Facebook
                              • Partager sur Twitter

                              manipulation des tableaux vector OOP

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown