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

Langage C++ Discussion :

Pouvoir scruter un paramètres de différents objets


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Pouvoir scruter un paramètres de différents objets
    Bonjour à tourtes et à tous,

    Le titre n'est pas vraiment clair

    Je crée un programme dans lequel j'ai un bon nombre de boutons qui ont été déclarés séparément, pas dans un tableau.

    Certains de ces boutons ont un paramètre, appelons-le "groupe" ayant la même valeur.

    Je voudrais pouvoir balayer l'ensemble des boutons et noter ceux qui une valeur particulière du paramètre "groupe". Comment fait-on ?

    Mon idée est d'attacher à chaque objet, à sa création, un pointeur par lequel je peux ensuite l'adresser et ainsi voir son contenu ... mais je suis un super débutant en C++ et je ne sais pas vraiment comment faire.

    Merci de votre aide.

    Pierre

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par défaut
    Bonjour,

    Sais tu parcourir l'ensemble de tes listes dans une boucle?
    Que sont ces listes? des C-Array ( type var[] ) ou des vectors? (std::vector) ou un autre conteneur ?
    De quel type sont tes listes? as tu la définition de la/les classe(s) de ces listes?

    Un peu de code pour éclaircir ta question s'il te plait

    Merci

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Voici le code :

    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
    int noBtn = 0;
     
    class Bouton {
    public:
      int groupe;
      void init(int);
    };
     
    Bouton *lstBtn = new Bouton[20]; // tableau de 20 pointeurs sur les boutons
     
    void Bouton::init(int g) {
      groupe = g;
      lstBtn[noBtn] = this; // ça, ça me donne une erreur
      ++noBtn;
    }
    Ce que je voudrais, est qu'à chaque fois que j'instancie un bouton, il se crée un pointeur sur ce bouton, ce pointeur faisant partie d'une liste.

    l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      lstBtn[noBtn] = this; // ça, ça me donne une erreur
    me donne une erreur. Si je mets &this, c'est pareil.

    Quelle est la bonne instruction qui me permettra de créer un pointeur sur le bouton ?

    Ayant ce pointeur, quelle est l'instruction qui permet d'accéder à un membre de la classe ?

    Merci de votre aide.

    Pierre

  4. #4
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bouton *lstBtn = new Bouton[20]; // tableau de 20 pointeurs sur les boutons
    Hello,

    Ceci n'est pas un tableau de pointeur, mais un tableau de Bouton.
    Si noBtn et lstBtn sont des variables globales, c'est un problème.

    Sinon pour un tableau de Bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::vector<Bouton> lstBtn;
    lstBtn.push_back(Bouton(/*...*/)); // ajout d'un bouton
    lstBtn.size(); // retourne le nombre de boutons
     
    // ou en passant par des pointeurs
     
    typedef std::unique_ptr<Bouton> btn_ptr;
    std::vector<btn_ptr> lstBtn;
    lstBtn.push_back(btn_ptr(new Bouton(/*...*/)); // ajout d'un bouton
    lstBtn.size(); // retourne le nombre de boutons
    Qu'un bouton s'ajoute tout seul à la liste est bizarre, c'est plus à l'entité qui va gérer ces boutons (la fenêtre par exemple) qui devra "posséder" et gérer ces boutons. C'est donc à elle de les ajouter à la liste.

    Pour effectuer un traitement seulement sur les boutons d'un groupe particulier, tu peux ensuite faire quelque chose du genre
    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
    // g++ -std=c++0x -o main main.cpp
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
     
    class Bouton {
    public:
    	int groupe;
    	std::string name;
     
    	Bouton(int g, const std::string& n): groupe(g), name(n) { }
    };
     
    int main() {	
    	std::vector<Bouton> lstBtn = {
    		Bouton(0, "a"), // groupe 0
    		Bouton(5, "b"), // groupe 5
    		Bouton(1, "c"), // groupe 1
    		Bouton(5, "d"), // groupe 5
    		Bouton(5, "e")  // groupe 5
    	};
     
    	// affiche le nom de chaque bouton du groupe 5
    	std::for_each(lstBtn.begin(), lstBtn.end(), [](Bouton& b) {
    		if(b.groupe == 5) {
    			std::cout << b.name << std::endl;
    		}
    	});
    	return 0;
    }

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci Iradrille pour cette proposition. Étant débutant en C++, je vais étudier un peu tout cela.

    Pour autant, n'y a-t-il pas un méthode avec des pointeurs ... qui pointent sur les objets créés ... et utiliser ces pointeurs pour accéder à un membre de l'objet pointé ?

    Cordialement.

    Pierre

  6. #6
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    C'est sensiblement la même chose avec des pointeurs.
    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
    // g++ -std=c++0x -o main main.cpp
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <memory>
     
    class Bouton {
    public:
    	int groupe;
    	std::string name;
     
    	Bouton(int g, const std::string& n): groupe(g), name(n) { }
    };
     
    int main() {
    	typedef std::unique_ptr<Bouton> bouton_ptr;
    	bouton_ptr a(new Bouton(0, "a")); // groupe 0
    	bouton_ptr b(new Bouton(5, "b")); // groupe 5
    	bouton_ptr c(new Bouton(1, "c")); // groupe 1
    	bouton_ptr d(new Bouton(5, "d")); // groupe 5
    	bouton_ptr e(new Bouton(5, "e")); // groupe 5
     
    	std::vector<bouton_ptr> lstBtn;
    	lstBtn.push_back(std::move(a));
    	lstBtn.push_back(std::move(b));
    	lstBtn.push_back(std::move(c));
    	lstBtn.push_back(std::move(d));
    	lstBtn.push_back(std::move(e));
     
    	// affiche le nom de chaque bouton du groupe 5
    	std::for_each(lstBtn.begin(), lstBtn.end(), [](bouton_ptr& b) {
    		if(b->groupe == 5) {
    			std::cout << b->name << std::endl;
    		}
    	});
    	return 0;
    }
    Jete un oeil à la doc de unique_ptr et shared_ptr, pour voir ce qui correspond à tes besoins.

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

Discussions similaires

  1. Paramètres internet différents selon session
    Par gregius dans le forum Windows XP
    Réponses: 2
    Dernier message: 27/11/2007, 10h34
  2. utiliser une variable comme paramètre de l'objet range
    Par stdebordeau dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/10/2007, 14h56
  3. [AJAX] Paramètres de type objet
    Par Mister Nono dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2007, 14h03
  4. Paramètres possibles pour objet type=application/pdf
    Par aduchesneau dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/01/2007, 19h27
  5. Animations avec différents objet
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/06/2004, 14h18

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