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 :

comment créer et manipuler n fois le meme objet


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    chercheur en physique
    Inscrit en
    Février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : chercheur en physique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 9
    Par défaut comment créer et manipuler n fois le meme objet
    désolé si mon problème est une évidence mais je débute en programmation.
    je cherche a faire, dans mon main, une fonction qui appelle une classe pour créer un objet. le but est de pouvoir appeler cette fonction autant que nécessaire est créer plusieurs objet. ce que je me demande c'est comment créer un nouveau nom de variable pour chacun de mes objets car le but est évidement de les manipuler par la suite. bref est il possible de créer un nom de variable évolutif en fonction d'un itérant?
    je ne sais pas vraiment comment m'y prendre.
    donc si j'ai était suffisamment claire pour exprimer mon but, comment on gère ce genre de situation en programmation.

    Merci pour vos suggestion

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MyObjects objets[NB];
    objets[0];
    objets[1];
    ...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Homme Profil pro
    chercheur en physique
    Inscrit en
    Février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : chercheur en physique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 9
    Par défaut
    eu désolé je ne suis pas sure de comprendre.
    c'est à dire que je peut créer un tableau qui contient "Nb" objet ? et que je peut les manipuler avec : " objet[i].fonction(); " ?

    merci de m’éclaircir

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Exactement.

    Mais si tu veux appeler un constructeur avec des paramètre, il faudra que tu fasses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyClass * myTab[nb];
    myTab[i] = new MyClass(4,5,8);
    myTab[i]->fonction();
    //...

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    nb devant être connu à la compilation
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si on ne connait pas nb à la compilation on pourra utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::vector<MyClass *> myVector; //plus de lecture que d'insertion/suppression/changement de place
    //ou
    std::list<MyClass *> myList; //plus d'insertion/suppression/changement de place que de lecture
    Sinon, s'il y a autant de lecture que d'insertion/suppression/changement de place on pourra utiliser des tables de hachages.

  7. #7
    Membre habitué
    Homme Profil pro
    chercheur en physique
    Inscrit en
    Février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : chercheur en physique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 9
    Par défaut
    Bon c'est super je vous remercie, j'essaye ça des ce soir.

  8. #8
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Si on ne connait pas nb à la compilation on pourra utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::vector<MyClass *> myVector; //plus de lecture que d'insertion/suppression/changement de place
    //ou
    std::list<MyClass *> myList; //plus d'insertion/suppression/changement de place que de lecture
    Sinon, s'il y a autant de lecture que d'insertion/suppression/changement de place on pourra utiliser des tables de hachages.
    La façon dont tu décris les containers est fausses. std::list sera quasi toujours moins performant que std::vector SAUF si il y a beaucoup d'insertion et suppression AU MILIEU et DEVANT le container. Pour ce qui est du changement de place, ça se fait en O(1) avec un vector et en O(n) avec une liste vu que tu dois d'abord trouver les deux éléments à échanger de place. Dans le cas où il y a des insertions/suppressions par l'avant, alors ce n'est toujours pas une liste qu'il faut utiliser mais un deque.

    Bon ça dépasse la demande actuelle, mais je pense que c'est une mauvaise pratique d'encourager l'utilisation de la list par des débutants, ils auront souvent le réflexe d'utiliser des list plutôt que des vector car ils se diront, j'ai une liste d'objet x, pas j'ai un vecteur d'objet x..

    La liste est moins performante à cause des nombreuses allocations.

    Les tables de hachage quant à elle, on un autre objectif, d'une part celui d'assurer l'unicité d'un couple <clé, élément>, et d'autre part de pouvoir accéder à un élément avec autre chose qu'un entier comme on le fait avec un vector.

    Bien évidemment mes explications sont incomplètes, mais je pense que c'est "l'esprit".

    En bref, fondu, le meilleur réflexe que tu peux avoir pour le moment c'est d'utiliser std::vector<monObjet>.

    Exemple:

    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
    #include <vector>
    #include <iostream>
     
    class Voiture
    {
      int puissance;
     
      public:
     
      Voiture(int p) : puissance(p) {}
      int getPuissance() { return puissance; }
    };
     
    int main()
    {
      std::vector<Voiture> mes_voitures;
      mes_voitures.push_back(Voiture(10));
      mes_voitures.push_back(Voiture(15));
     
      for(int i=0; i < mes_voitures.size(); ++i)
      {
         std::cout << "Voiture numéro "<< i+1 << ", puissance = " << mes_voitures[i].getPuissance() << std::endl;
      }
    }
    Ce code marche et est compilable, tu peux trouver toutes les méthode de vector ici : http://www.cplusplus.com/reference/stl/vector/ (par exemple).

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je parlais bien de déplacement et non d'échange d'éléments.
    Exemple, je veux mettre le premier élément à la dernière position.
    Ceci se traduira dans un vector à un déplacement de tous les éléments si je ne me trompe pas.

    Sinon, les tables de hachages peuvent aussi permettre de conserver les avantages de la list tout en divisant la complexité de recherche d'élément. Il faut juste choisir un attribut sur lequel les éléments seront triés.

  10. #10
    Membre habitué
    Homme Profil pro
    chercheur en physique
    Inscrit en
    Février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : chercheur en physique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 9
    Par défaut
    encore merci a tous, surtout au code de Trademark qui me montre comment utiliser le concept. j'ai pas encore finie mon projet mais j'estime que ma question est clairement résolu.

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

Discussions similaires

  1. Comment créer et manipuler une expression
    Par pekre dans le forum NetBeans
    Réponses: 0
    Dernier message: 26/05/2013, 16h17
  2. [WD11] comment afficher un champ 8 fois en meme temps
    Par Math2012 dans le forum WinDev
    Réponses: 9
    Dernier message: 15/05/2012, 19h47
  3. [MySQL] comment eviter de faire 2 fois la meme requete
    Par lelapinrusse dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/05/2008, 00h14
  4. Réponses: 7
    Dernier message: 21/09/2007, 15h26
  5. [C#][Débutant] Comment empecher d ouvrir plusieurs fois la meme fenetre
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 21
    Dernier message: 27/04/2006, 13h41

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