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 :

Creation tableau d'objet C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Creation tableau d'objet C++
    Bonjour,

    Voila j'aimerai réaliser un pacman pour un tp en cours, je suis déja au jalon 7, le truc c'est que je doit creer un tableau de 5 personnages !

    Et j'ai cherché partout impossible de creer un tableau comme ceci par exmeple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Personnage tabPerso[4];
     
    tabPerso[0] = Personnage pacman (m, PACMAN);
    tabPerso[1] = Personnage fantome1 (m, FANTOME);
     
    ...etc...
    Sa me dit pb etc....

    Déja premiere petite question, avez vous carrément un bon tuto ou des sources pour creer son pacman en c++ ? (j'arriverai a me dépatouiller ) Sinon savez vous comment je pourrai renseigner ma classe Personnage et comment faire pour instancier et affécté un tableau de 5 personnage ? Ou encore un moyen de mettre mes persos dans un tableau

    Merci beaucoup !

  2. #2
    Membre régulier Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Points : 89
    Points
    89
    Par défaut
    Un bon tuto pour pacman, je n'en ai pas. Mais libre à toi de chercher sur le net, tu en trouveras peut-être. Ceci dit, est-ce la meilleure solution que de copier quelque chose d'existant ? Autant le faire toi-même de A à Z, et de te frotter aux petits problèmes, et bien évidemment de les résoudre. C'est comme ca qu'on apprend.

    Sinon, pour ton tableau de personnage, voici une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Personnage *tabPerso[4];
    for(int i=0 ; i<4 ; i++)
    {
         if(i==0)
              tabPerso[i] = new Personnage(m, PACMAN);
         else
              tabPerso[i] = new Personnage(m, FANTOME);
     
    }
    ou bien si tu n'a pas beaucoup de personnages dans ton tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Personnage *tabPerso[4];
    tabPerso[0] = new Personnage(m, PACMAN);
    tabPerso[1] = new Personnage(m, FANTOME);
    tabPerso[2] = new Personnage(m, FANTOME);
    tabPerso[3] = new Personnage(m, FANTOME);
    }
    Après, libre à toi d'utiliser les conteneurs de la STL (list, vector, etc...) si tu le souhaite.
    Bon courage !

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup sa marche parfaitement ! Rapide et précis !

  4. #4
    Membre expérimenté 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
    Points : 1 396
    Points
    1 396
    Par défaut
    Juste une petite précision, tu dis vouloir affecter un tableau de 5 personnages. Le tableau [4] ne sera juste que pour 4 personnages (on commence à compter à partir de 1 dans ce cas).

    Bonne chance pour la suite

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Moi j'ai une autre petite question vraiment trés bete , comment je fait pour utiliser mon objet maintenant ?? (J'ai des Get et Set dans ma classe Personnage que j'aimerai utilisé)

    Avant je faisait sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personnage pacman (m, PACMAN);
    mais maintenant c'est sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabPerso[0] = new Personnage(m, PACMAN);
    la différence des 2 code c'est que je nomme pacman en personnage sur le premier et pas dans l'autre, du coup comment je fait pour me servir de mon objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabPerso[0] = new Personnage(m, PACMAN);
    ??? ?

    avant je faisait


  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Salut,

    Tu peux faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabPerso[0]->afficher();

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Hello

    Attention aux fuites de mémoire ! Tu fais des new et tu stockes tes objets dans un tableau, mais est ce que tu détruis bien tout le monde à la fin ? C'est un peu dangereux d'utiliser directement des tableaux C++, tu peux utiliser aussi la qui te fournit std::vector.

    Comme tes classes ont une sémantique d'entité, il est normal de les stocker via des pointeurs. Mais tu peux aussi les stocker dans des smart pointers appropriés pour que la mémoire soit correctement libérée à la fin de l'exécution.

    Je t'invite à lire les docs pointées par mes liens. Voici un code qui te montre un exemple de ce qu'on peut faire dans ton cas :

    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
    #include <string>
    #include <vector>
    #include <iostream>
    #include <boost/shared_ptr.hpp>
     
    class What
    {};
     
    class Personnage
    {
    public:
      enum Type { Pacman, Fantome};
      Personnage(What const & iWhat, Type iType);
      Type GetType();
     
    private:
      Type m_type;
    };
     
    Personnage::Personnage(What const & iWhat, Type iType) : m_type(iType)
    {}
     
    Personnage::Type Personnage::GetType()
    {
      return m_type;
    }
     
    typedef boost::shared_ptr<Personnage> Personnage_sp;
     
    int main(int argc, char* argv[])
    { 
      What m;
      std::vector<Personnage_sp> mesPersonnages;
     
      mesPersonnages.push_back( Personnage_sp(new Personnage(m,Personnage::Pacman)));
      mesPersonnages.push_back( Personnage_sp(new Personnage(m,Personnage::Fantome)));
      mesPersonnages.push_back( Personnage_sp(new Personnage(m,Personnage::Fantome)));
      mesPersonnages.push_back( Personnage_sp(new Personnage(m,Personnage::Fantome)));
      mesPersonnages.push_back( Personnage_sp(new Personnage(m,Personnage::Fantome)));
     
      std::string pacmanName("Pacman");
      std::string fantomeName("fantôme");
     
      for(unsigned int i = 0; i < mesPersonnages.size(); i++)
      {
        Personnage_sp current = mesPersonnages[i];
        if(current)
        {
          std::cout << "Le personnage numéro " << i << " est un " <<  ((Personnage::Pacman == current->GetType()) ? pacmanName : fantomeName) << std::endl;
        }
      }
     
      return 0;
    }
    PS : La classe What ne sert à rien, je l'ai juste mise pour reproduire ton code (le premier argument du constructeur, comme je ne sais pas ce que c'est).

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    merci mais c'est un peu complexe pour moi

    Y'a pas moyen de faire un malloc directement ?

  9. #9
    Membre régulier Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Points : 89
    Points
    89
    Par défaut
    En C++, ce n'est plus malloc, c'est new (tel que je te l'ai montré).
    Et pour supprimer ce n'est plus free, c'est delete
    Donc dans le destructeur de ta classe il faudra que tu fasse une boucle qui parcours chacun des éléments de ton tableau de Personnage et qui delete chacun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0 ; i<4 ; i++)
    {
         delete  tabPerso[i];
    }
    Mais comme l'a dit jblecanard, il serait plus simple d'utiliser les conteneurs de la STL. Tu as des cours sur Internet et la doc ici. Regarde ca, c'est, à mon gout, mieux que de faire un tableau.
    Courage !

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Ce n'est pas si compliqué, puis tu peux n'utiliser que les vector pour remplacer les tableaux sans forcément utiliser des smart pointers.

    Oui c'est un poil plus compliqué... mais c'est un coût d'apprentissage assez faible et surtout qui te fera gagner du temps pour tes futurs TPs car ça te resservira.

    Regarde un exemple tout cuit pour toi.

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Puisque tu connais initialement la taille, utilise plutôt un std::array.

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

Discussions similaires

  1. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45
  2. Tableau d'objets
    Par moulefrite dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 14h14
  3. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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