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 :

Cr�er une liste d'objets statiques dans une classe


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    F�vrier 2006
    Messages
    21
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 21
    Par d�faut Cr�er une liste d'objets statiques dans une classe
    Je voulais cr�er une liste d'obets se modifiant facilement et j'ai pens� � cete classe :

    class List_objets
    {
    public:
    List_objets(int id)
    {
    list[2000];
    }
    int get_free_id()
    {
    int done = 0;
    int i = 0;
    while(!done && i<2000){if(list_check[i]) {i++;}else {done=true;break; return i;}}
    return 0;
    }
    void new_objet(Object_sort &sort, int x, int y)
    {
    int id = get_free_id();
    list_check[id] = true;
    list[id] = &Objet(id, sort, x,y); //******************************pas bien
    }

    bool list_check[2000];
    Objet *list[2000];
    } unit_list(1);
    J'ai cit� toute la classe, mais seule la proc�dure new_object est probl�matique. La ligne �list[id] = &Objet(id, sort, x,y);� cr�e un objet, mais le d�molit directement apr�s la fonction. Comment pourrais-je r�gler ce probl�me???????????????

  2. #2
    Invit�(e)
    Invit�(e)
    Par d�faut
    Bonjour
    Le mot clef 'static' pourrait il r�soudre ton probl�me.
    Dans une classe, un membre d�clar� statique est le m�me pour tous les objets instanci�s de la classe.
    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
    fichier .h
    class toto
    {
      static int i;
    public:
      tell()
      {
        cout << "je suis " << this << endl;
      }
      toto()
      {
        ++i
      }
      ~toto()
      {
        --i;
      } 
      static stat()
      {
        cout << "il y a " << i << " objets toto" << endl;
      }
    };
     
    fichier .cxx
    #include <iostream> // pour cout
    using namespace std;
    #include ....h
    int toto::i = 0; // une initialisation des membres statiques est utile en dehors de la déclaration de la classe
    ...
    int main()
    {
      toto::stat() ;// appel de la méthode statique
      toto obj1;
      obj1.tell(); // méthode non statique
      toto obj2;
      obj2.stat();// appel de la méthode statique
      return 0;
    }
    mabu

  3. #3
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut Re: Cr�er une liste d'objets statiques dans une classe
    Citation Envoy� par crossbowman
    Je voulais cr�er une liste d'obets se modifiant facilement et j'ai pens� � cete classe :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    class List_objets
    {
    public:
    	List_objets(int id)
    	{
    		list[2000];
    	}
    Que crois tu que fait ce code ?

    En r�alit�, il lit la valeur de la 2001�me case d'un tableau qui n'en a que 2000, ce qui est une bonne raison de planter le programme, puis il n'en fait rien.

    Citation Envoy� par crossbowman
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    	int get_free_id()
    	{
    		int done = 0;
    		int i = 0;
    		while(!done && i<2000){if(list_check[i]) {i++;}else {done=true;break; return i;}}
    		return 0;
    	}
    Que vient faire "done" ? O� as-tu vu que le tableau �tait initialis� avec des 0 (ou NULL) ?

    Citation Envoy� par crossbowman
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    	void new_objet(Object_sort &sort, int x, int y)
    	{
    		int id = get_free_id();
    		list_check[id] = true;
    		list[id] = &Objet(id, sort, x,y); //******************************pas bien
    	}
    Peut-�tre ce que tu cherches est le placement-new :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Object *newObject = new(list_check + get_free_id()) Object(id, sort, x, y);
    Citation Envoy� par crossbowman
    J'ai cit� toute la classe, mais seule la proc�dure new_object est probl�matique.
    H�l�s, non...
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  4. #4
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut Re: Cr�er une liste d'objets statiques dans une classe
    Citation Envoy� par crossbowman
    La ligne �list[id] = &Objet(id, sort, x,y);� cr�e un objet, mais le d�molit directement apr�s la fonction. Comment pourrais-je r�gler ce probl�me???????????????
    L'appel au constructeur Objet(id, sort,x,y) cr�e un objet temporaire anonyme. Cet objet temporaire est d�truit d�s fin de l'instruction. Pour �viter cela, puisque ta liste prend des pointeurs, mieux vaut faire une allocation dynamique normale :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    list[id] = new Object( id, sort, x, y );
    Cela dit, ton code a pas mal d'autres probl�mes et il y a des chances qu'une solution nettement plus simple et robuste soit facilement envisageable. Le recours � un std::map, peut-�tre ?

Discussions similaires

  1. R�ponses: 0
    Dernier message: 07/01/2015, 12h14
  2. R�ponses: 3
    Dernier message: 14/08/2012, 10h24
  3. R�ponses: 4
    Dernier message: 01/03/2012, 19h50
  4. R�ponses: 2
    Dernier message: 29/02/2012, 15h20
  5. R�ponses: 2
    Dernier message: 21/05/2007, 20h43

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