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 :

Opérateurs incompris "->"


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 54
    Points : 40
    Points
    40
    Par défaut Opérateurs incompris "->"
    Bonjour je suis en train de déchiffrer un code en c++, néanmoins je me pose beaucoup de question, notamment sur un opérateur , 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
    16
    17
    18
    19
    20
    21
    22
    23
    for(unsigned s(0);s<w.size();s++)
    {  			  			
    unsigned layer(w[s]->usbDaqAddress()-9);
    assert(layer<6);			
    for(unsigned region(0);region<4;region++)
    {
    const MpsSensor1BunchTrainDatum *p(w[s]->data()->regionData(region));			
    // Loop over sensor hitsq
    	for(unsigned j(0);j<w[s]->data()->numberOfRegionHits(region);j++)
    		{	
    			// Find which channels fired
    			for(unsigned c(0);c<6;c++)
    		{
    				if(p[j].channel(c)) //if channel is true
    				{		
    					unsigned x = (42*region+6*p[j].group()+c);								
    					unsigned y = p[j].row() ;
     
    	    			}
    		}
    		}			
    	}
    }
    Ma question est sur l'opérateur -> par exemple dans la ligne ci-dessous
    for(unsigned j(0);j<w[s]->data()->numberOfRegionHits(region);j++)

    Que signifie cet opérateur? si toutefois s'en est un

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    C'est bien un opérateur. Et sans rentrer dans les détails, a->b est équivalent à (*a).b, où a est un pointeur sur T, et b un membre de la classe T.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    struct A
    {
      int i;
    };
     
    int main()
    {
      A* pa = new A();
      std::cout << pa->i; //affiche 0
     
      return 0;
    }

  3. #3
    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
    J'ajouterais que sans l'utilisation d'un pointeur, on aurait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    struct A
    {
      int i;
    };
     
    int main()
    {
      A a;
      std::cout << a.i; //affiche 0
     
      return 0;
    }

  4. #4
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    Salut,

    D'après ton code on devine que w est un tableau de pointeur.

    w[s] est donc un pointeur, ce pointeur doit pointer sur une instance d'une classe qui possède une méthode data().

    Avec w[s]->data() on appelle cette méthode pour l'objet pointé par w[s].

    Cette méthode data() retourne certainement un pointeur sur une instance d'une classe possédant une méthode numberOfRegionHits(region).

    Avec w[s]->data()->numberOfRegionHits(region) on appelle cette méthode pour l'objet pointé par w[s]->data().

    Euh... je ne sais pas si j'ai été clair

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par jmv Voir le message
    Salut,

    D'après ton code on devine que w est un tableau de pointeur.
    Pourquoi ?
    C'est quoi ta boule de cristal () ?
    * et -> seront présent dans la première enveloppe venue (par expl std::shared_ptr ou n'importe quel itérateur)
    [] est surchargé par std::vector, std::map, std::deque, std::bitset ou encore std::array.

    Donc, je ne vois pas pourquoi w serait un tableau de pointeur

  6. #6
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Pourquoi ?
    C'est quoi ta boule de cristal () ?
    * et -> seront présent dans la première enveloppe venue (par expl std::shared_ptr ou n'importe quel itérateur)
    [] est surchargé par std::vector, std::map, std::deque, std::bitset ou encore std::array.

    Donc, je ne vois pas pourquoi w serait un tableau de pointeur
    Effectivement tu as raison, disons que j'ai pris des raccourcis
    D'ailleurs en parlant de tableau je pensais plutôt au vector, je n'utilise pratiquement plus de tableau (sauf si je connais d'avance la taille et que les performances sont importantes, mais ça c'est un autre débat).

    Je vais nettoyer ma boule de cristal.

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