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 :

surcharge d'opérateur et pointeur


Sujet :

C++

Vue hybride

cyril_sy surcharge d'opérateur et... 24/08/2007, 16h20
Laurent Gomila Une surcharge perso... 24/08/2007, 16h33
cyril_sy Merci pour ta réponse. En... 24/08/2007, 17h00
Laurent Gomila Oui, utiliser un foncteur est... 24/08/2007, 17h19
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut surcharge d'opérateur et pointeur
    Bonjour à tous.

    Est-il possible faire une surcharge d'operateur sur des pointeurs de classe?

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool operator< (Node* n1, Node* n2);
    me renvoie une erreur de compilation...

    merci pour votre aide

  2. #2
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Une surcharge perso d'opérateur doit avoir pour opérande au moins un type défini par l'utilisateur. Or là tu veux comparer deux pointeurs, qui sont des types primitifs.

    Mais je vois mal pourquoi on voudrait redéfinir ce genre d'oparateur, si tu veux comparer deux Node alors écris un operator < (const Node& n1, const Node& n2) et déréférence tes pointeurs au moment de la comparaison.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Merci pour ta réponse.

    En fait j'essaye d'utiliser une priority_queue, qui contient des pointeurs de Node.

    Apparament la manière la plus simple d'en utiliser une est de surcharger operator< sur les objets qu'elle contient.

    on peut ainsi déclarer la priority_queue de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    priority_queue<Node*> openList;
    Je viens de trouver une autre manière, mais je ne trouve pas ça très compréhenssible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class NodeCompare {
      public:
     
        bool operator()(const Node* n1, const Node* n2) const{ return *n1 > *n2; }
    };
    et je dois déclarer ma priority queue comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    priority_queue<Node*,vector<Node*>,NodeCompare> openList;
    Edit: En fait je viens de me rendre compte que des pointeurs dans une priority_queue, c'etait pas malin . Il suffit en effet qu'un des objets pointé soit changé pour que la priority_queue ne soit plus dans le bon ordre...

  4. #4
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oui, utiliser un foncteur est la meilleure manière de faire. On ne peut pas toujours créer un opérateur < personnalisé (comme tu peux le voir ici), donc on te donne la possibilité de fournir une fonction quelconque, sous forme de foncteur.

    Si tu as du mal avec les foncteurs jette un oeil à la FAQ.

Discussions similaires

  1. Problème de surcharge d'opérateur flux avec pointeur
    Par eleve_prog dans le forum Débuter
    Réponses: 4
    Dernier message: 18/04/2011, 18h41
  2. Surcharge opérateur et pointeur
    Par coberle dans le forum C++
    Réponses: 2
    Dernier message: 07/04/2009, 07h30
  3. Réponses: 9
    Dernier message: 09/05/2008, 23h53
  4. [C#] Tri d'objet et surcharge d'opérateur
    Par Royd938 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/12/2007, 00h26
  5. [VB .NET] Surcharge d'opérateur
    Par Franckintosh dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/09/2004, 19h05

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