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 :

redéfinition des opérateurs en C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut redéfinition des opérateurs en C++
    Salut!

    J'ai vu une ligne de code byzarre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    operator MaClasse *() { return _un_attribut_de_MaClasse; }
    C'est une redéfinition de quel opérateur?

    Sinon une autre question sur une déclaration d'un pointeur vers fonctions:

    dans ClassA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (ClassB::*_method)() const;
    par contre _method n'existe pas dans ClassB...

    Merci..[/code]

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il s'agirait de l'opérateur '()'
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    operator MaClasse *() { return _un_attribut_de_MaClasse; }
    C'est une redéfinition de quel opérateur?
    De l'opérateur de conversion en MaClasse*.

    dans ClassA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (ClassB::*_method)() const;
    par contre _method n'existe pas dans ClassB...
    _method est déclaré dans ClassA comme étant un pointeur pouvant aller pointer sur des fonctions membres constantes de ClassB, renvoyant un int et ne prenant aucun paramètre.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut A quoi ca sert le const ici?
    Salut!

    J'ai une question vraiment débutante...

    Dans ClassA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (ClassB::*_method)() const;
    le const ici signifie que
    - la valeur retour est constante?
    - paramètre constant?
    - ClassB constant?
    - *_method constant?

    PS:
    un peu d'explication pour cette ligne de code...

    Loulou24
    Posté le: Ven Mar 24, 2006 14:23

    _method est déclaré dans ClassA comme étant un pointeur pouvant aller pointer sur des fonctions membres de ClassB, renvoyant un int et ne prenant aucun paramètre.

    Merci à Loulou

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci à vous tous 8)

  6. #6
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    Ca veut dire que la fonction est constante => elle assure que les attributs de la classe ne sont pas modifier...

    Perso je vois ça + comme une protection pour le programmeur que pour l'utilisateur. Je m'en sert trés souvent, par exemple dans les accesseur de type "get"...
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pas mieux
    J'ai fusionné les 2 questions sur le même bout de code et enlevé le tag résolu comme la question elle-même n'était pas résolue

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    oki

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut one more question...
    one more question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int (ClassB::*_mehod)() const;
     
    ClassB b=new ClassB();
     
    if ( ! ( b->*_method )() ) {
           // ...
    }
    ( ! ( b->*_method )() ) c'est aussi ( ( b->*_method )() ==0) ?

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    oui, car il y a conversion implicite vers les booléens. 0 vaut false, le reste true.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut pointeur vers fonctions
    Oups, encore une question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int (ClassB::*_mehod)() const; 
     
    ClassB b=new ClassB(); 
     
    if ( ! ( b->*_method )() ) { 
           // ... 
    }

    ( ! ( b->*_method )() ) veut dire que s'il existe dans ClassB au moins une fonction comme

    int nomFct (void) const {
    //...
    }

    qui renvoit une valeur égale à 0, le resultat sera Faux?

    Merci

  12. #12
    Membre éprouvé 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
    Points : 933
    Points
    933
    Par défaut
    Non.
    _method est un pointeur sur une fonction membre de ClassB renvoyant un int, sans arguments, et constante.

    Comme tout pointeur, _method doit être initialisé : il faut le faire pointer sur la fonction membre de ClassB qui t'intéresse.
    Dès lors : est juste un appel à la méthode de ClassB pointée par le pointeur de fonction _method, pour l'instance *b.

Discussions similaires

  1. Réponses: 10
    Dernier message: 17/12/2007, 10h13
  2. Union des opérateurs IN et LIKE
    Par PapyCrouton dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/08/2006, 16h28
  3. Redéfinition des accesskeys
    Par Gunn_ dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/07/2006, 10h46
  4. [SQL] Utilisation des opérateurs SQL plutôt que PHP
    Par php_newbie dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/05/2006, 11h38
  5. implémentation des opérateurs de comparaison
    Par niko8181 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/04/2005, 11h58

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