Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer un objet grâce un a string

    28 décembre 2020 à 13:28:01

     Bonjour,

    J'aimerai pouvoir creer un objet avec un nom contenue dans un string, je ne veux pas que le nom soit des variable membre mais que l'objet s'appelle vraiment par le contenue dans un string :

    string nom; 
    std::cin >> nom;
    Perssonage nom; /* création d'un objet de la classe Perssonage qui porte le nom du contenue de la variable nom*/
    



    -
    Edité par ArthusGodelu 28 décembre 2020 à 21:54:12

    • Partager sur Facebook
    • Partager sur Twitter
      28 décembre 2020 à 14:42:47

      Bonjour,

      Manque de Politesse

      Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2020 à 15:35:32

        Bonjour,

        Tu veux que le nom de ta variable soit le texte qu'il y a dans ta string, c'est ça?
        Les noms des variables, c'est ce qui est dans le code, ça existe jusqu'au moment de la compilation. On obtient un exécutable dans lequel il ne reste que les traitements à effectuer.
        Au moment où le code s'exécute et où on obtient le texte dans une string, les noms des variables ne servent plus à rien car le code à déjà été compilé.
        Il n'y a pas de nom de variable ni de noms de type dans l'exécutable. Le seul contre exemple est le nom de fonctions d'une bibliothèque dynamique (une DLL), car le lien vers ces fonctions ne pourra se faire qu'au moment de l'exécution.

        Donc ce que tu souhaites faire n'a pas vraiment de sens. Cela dit, il existe des tas de moyens simple permettant d'associer un texte à une variable, par exemple il y a std::map<>.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

          28 décembre 2020 à 16:30:59

          Salut,

          Imaginons un instant qu'une telle fonctionnalité existe en C++. Une fois que tu as créé ta variable, comment est-ce que tu y ferais référence:euh:

          Tu ne peux pas nommer tes variables de manière dynamique. C'est impossible dans un langage compilé comme le C++. Comme l'a dit @Dalfab, tu pourrais utiliser une std::map<> mais, à mon avis, tu vas te compliquer la vie.

          Si tu ressens le besoin de nommer dynamiquement tes objets, c'est que tu ne devrais pas les nommer et les stocker dans un tableau à la place (un std::vector, plutôt). En les stockant dans un tableau, le "nom" de ton objet se transforme en index (bien plus pratique à manipuler ;)). 

          -
          Edité par Raynobrak 28 décembre 2020 à 16:31:53

          • Partager sur Facebook
          • Partager sur Twitter
            28 décembre 2020 à 18:40:25

            Bonjour, 

            Oui enfaite je voudrai pourvoir mètre un nom dynamique a un objet, mais je pense qu'utiliser un vetor est une bonne idée, mais comment faire pour ajouter un objet dans un vector ? 

            -
            Edité par ArthusGodelu 28 décembre 2020 à 18:40:40

            • Partager sur Facebook
            • Partager sur Twitter
              29 décembre 2020 à 11:38:00

              Bonjour,

              Pour l'utilisation d'un vector, tu peux regarder ici : https://en.cppreference.com/w/cpp/container/vector (il y a même un exemple à la fin)

              En ce qui concerne la demande initiale, ... je ne comprends pas le besoin.

              Cordialement

              • Partager sur Facebook
              • Partager sur Twitter
                29 décembre 2020 à 11:44:19

                ArthusGodelu a écrit:

                Bonjour, 

                Oui enfaite je voudrai pourvoir mètre un nom dynamique a un objet, mais je pense qu'utiliser un vetor est une bonne idée, mais comment faire pour ajouter un objet dans un vector ? 

                -
                Edité par ArthusGodelu il y a environ 17 heures


                Un "nom dynamique", c'est pas un terme habituel de la programmation.

                Peux-tu nous montrer un exemple très simple où tu utiliserais un objet créé avec le "nom dynamique" toto ?

                 ---

                par contre, ce qui est faisable, c'est d'avoir une structure de données qui contient des données, et que l'on peut retrouver par une clé. Par exemple une "map" de Voitures, indexées par leur plaque d'immatriculation.


                -
                Edité par michelbillaud 29 décembre 2020 à 11:48:41

                • Partager sur Facebook
                • Partager sur Twitter
                  29 décembre 2020 à 17:58:04

                  michelbillaud a écrit:

                  par contre, ce qui est faisable, c'est d'avoir une structure de données qui contient des données, et que l'on peut retrouver par une clé. Par exemple une "map" de Voitures, indexées par leur plaque d'immatriculation.

                  std::unordored_map<std::string, std::any> variables;
                  
                  std::string name;
                  std::cin >> name;
                  variables[name] = Personnage(name);
                  <troll ! Ne faites pas ca !>


                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 décembre 2020 à 18:18:36

                    ok,une map de string et de pointeurs, alors

                    std::unordered_map<std::string, Voiture *> vehicules;



                    -
                    Edité par michelbillaud 29 décembre 2020 à 18:19:57

                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 janvier 2021 à 13:24:26

                      Merci pour vos réponse,

                      Enfaite dans le programme doit générer plusieurs objet, mais ce nombre d'objet dépent de ce que rentre l'utilisateur donc je voudrai savoir comment faire ça, c'est pour ca que j'ai demander comment attribuer des nom pour pour les mettre dans une boucle et pouvoir la répéter x fois mais si vous savez comment faire pour créer x objet en fonction de x cela m'intéresse 

                      Merci

                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 janvier 2021 à 14:39:35

                        Qu'est ce qi'on ferait avec des noms dans une boucle ? Tu peux donner un exemple ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 janvier 2021 à 18:09:48

                          ArthusGodelu a écrit:

                          Merci pour vos réponse,

                          Enfaite dans le programme doit générer plusieurs objet, mais ce nombre d'objet dépent de ce que rentre l'utilisateur donc je voudrai savoir comment faire ça, c'est pour ca que j'ai demander comment attribuer des nom pour pour les mettre dans une boucle et pouvoir la répéter x fois mais si vous savez comment faire pour créer x objet en fonction de x cela m'intéresse 

                          Merci

                          La réponse t'a été donnée. Tu ne peux pas nommer des variables de manière dynamique, il faut que tu mettes tes objets dans un tableau (à priori, un std::vector, étant donné que le nombre d'objets stockés sera connu seulement lors de l'exécution).

                          -
                          Edité par Raynobrak 1 janvier 2021 à 18:10:25

                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 janvier 2021 à 18:17:01

                            Raynobrak a écrit:

                            > il faut que tu mettes tes objets dans un tableau (à priori, un std::vector, étant donné que le nombre d'objets stockés sera connu seulement lors de l'exécution).



                            Il est prématuré de décider si ça doit être un tableau, un ensemble ou un dictionnaire ou autre chose tant qu'on ne sait pas comment l'honorable demandeur veut utiliser ensuite les éléments qui auront été créés dans la boucle.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 janvier 2021 à 19:51:55

                              michelbillaud a écrit:

                              Il est prématuré de décider si ça doit être un tableau, un ensemble ou un dictionnaire ou autre chose tant qu'on ne sait pas comment l'honorable demandeur veut utiliser ensuite les éléments qui auront été créés dans la boucle.

                              Quand un débutant pose une question un peu bizarre, il faut essayer de comprendre pourquoi la personne se pose cette question au lieu d'y répondre au premier degré :-°

                              Lorsque je débutais le C++, je me souviens très bien avoir voulu créer des variables de manière dynamique. L'idée de créer des noms dynamiquement me semblait logique mais je ne savais pas comment le faire. Ce n'est qu'après avoir découvert les tableaux que je me suis rendu compte que j'essayais initialement de résoudre mon problème de la mauvaise façon.

                              En gros, la question qu'il se pose n'est pas "Comment nommer des variables dynamiquement ?" mais plutôt "Comment créer et utiliser des variables sans avoir besoin de les nommer ?". Le fait de comprendre comment et pourquoi on utilise des tableaux dynamiques (genre std::vector) lui permettra de résoudre son problème.

                              -
                              Edité par Raynobrak 1 janvier 2021 à 19:52:55

                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 janvier 2021 à 7:29:39

                                Quand un débutant pose une question bizarre, on lui demande de donner un exemple de ce qu'il veut faire, et ça fait déjà plusieurs fois.

                                Ca permet de distinguer plusieurs cas

                                • Mauvaise formulation
                                • Idée fumeuse 
                                • Probleme XY 
                                • ...
                                Et ce qui est important, c'est de dialoguer pour aider à écaircir, pas de fourguer un bout de code.
                                On n'a toujours pas obtenu de réponse concrète.
                                Pour parler de mauvaise formulation, "créer des variables", un programme qui "crée des variables" ca n'existe pas (en C et une grande partie des langages de programmation).  Une variable, c'est un nom qui figure dans le texte source,  qui désigne une donnée, ou une référence à une donnée, qui est connu à la compilation, et qui n'existe pas lors de l'exécution.
                                Ici on n'est pas encore arrivés à une formulation suffisante. Il semble qu'il soit question de lire interactivement des données, dont le nombre est connu (x) au départ. Et de les mettre quelque part.
                                // todo déclarer un truc
                                
                                for (int i = 0; i < x; i++) {
                                
                                  // todo lire une donnée 
                                
                                  // todo ajouter la donnée dans le truc
                                
                                }
                                Le titre peut suggérer qu'il y aurait construction de chaque donnée à partir d'une chaîne qui a été lue, et le corps du message qu'il faudra identifier les données lues par un nom ("nom de variable").  On a dit "nom" et pas "numero", donc ça pousse du côté d'une structure "dictionnaire" plutôt que tableau.
                                Mais ça c'est sous réserve de précision, confirmation, exemple d'utilisation...
                                En tout cas, pas question de "créer des variables" pendant l'exécution. La question c'est d'avoir une variable susceptible de contenir plusieurs données.
                                En relisant le premier message, on voit que cette notion de conteneur est totalement absente, l'accès à la donnée étant supposé se faire par un nom  de variable créé par magie. Et demander comment ça sera utilisé ensuite, c'est un moyen de faire voir que ça ne tient pas la route.

                                -
                                Edité par michelbillaud 2 janvier 2021 à 11:51:18

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Créer un objet grâce un a string

                                × 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