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 d'opérateur & pointeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut Redéfinition d'opérateur & pointeurs
    Bonjour,

    Étant un peu en avance à un TP, mon prof de C++ m'a demandé de faire en sorte de redéfinir bool operator<(Creature *, Creature *).

    Il pensait que ce serait possible en utilisant des templates mais après essais et renseignement, ce n'est pas possible de cette manière.

    J'ai tenté de créer une classe dont le constructeur prend en paramètre un Creature * en espérant avoir une conversion implicite mais cela ne marche pas non plus.

    Mon professeur pense que l'opérateur< a été défini de manière générique et qu'il se peut qu'il cast les pointeurs vers des pointeurs void *.
    Le but serait alors de définir quelque chose de plus spécifique pour créer notre propre operateur(Creature *, Creature *).

    Auriez-vous des pistes ou des idées ?

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    Vu qu'un pointeur c'est un long (généralement) ton opérateur < va comparer des long. Normal non ?

    Je pense que ça marcherait si tu passais par des références (constantes).

    Ou si tu ne peux pas, il faudrait que tu crées un foncteur/fonction de comparaison que tu passerais là où tu en as besoin.

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par Trademark Voir le message
    Vu qu'un pointeur c'est un long (généralement) ton opérateur < va comparer des long. Normal non ?
    Un pointeur n'est pas un long, c'est un type à part entière :
    -int * ptr; long test = ptr; refusera de compiler.
    L'opérateur < va comparer la valeur des pointeurs.

    Citation Envoyé par Trademark Voir le message
    Je pense que ça marcherait si tu passais par des références (constantes).
    Malheureusement, le compilateur n'accepte pas aussi les référence sur des pointeurs constants.

    Citation Envoyé par Trademark Voir le message
    Ou si tu ne peux pas, il faudrait que tu crées un foncteur/fonction de comparaison que tu passerais là où tu en as besoin.
    Citation Envoyé par jabbounet
    peut que jeter un oeil ici t'aidera:

    http://cpp.developpez.com/faq/cpp/?p...ator_inferieur

    http://stackoverflow.com/questions/4...or-overloading

    http://www.cplusplus.com/reference/std/functional/less/
    Oui je sais mais ce n'est pas le but^^
    La meilleur solution étant d'utiliser des shared_ptr au lieu d'utiliser de simples pointeurs.

    Mais les Creature * ne sont pas des built-in type, ce sont des user-defined type donc en théorie il devrait être possible de surcharger un opérateur avec des pointeurs sur Creatures.

    Il doit aussi y avoir quelque chose de générique pour la comparaison de pointeurs et donc on doit pouvoir apporter une définition plus spécialisée qui nous permettrait de redéfinir l'opérateur à moins qu'il y ai dans la définition des pointeurs quelque chose de spécial qui nous échappe ?

  4. #4
    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 : 50
    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
    On ne peut pas :
    Citation Envoyé par Le standard 13.5/6
    An operator function shall either be a non-static member function or be a non-member function and have at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an enumeration.
    L’opérateur < est défini sur les pointeurs, quel que soit leur type, et on n'en peut mais...
    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.

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    L’opérateur < est défini sur les pointeurs, quel que soit leur type, et on n'en peut mais...
    Je dois avouer que je suis un petit peu perplexe.

    Est-ce que cette interdiction est dû à la norme ou à une réelle contrainte technique ?
    Un compilateur est pourtant capable de surcharger des opérateurs et de différencier des pointeurs pointant sur des objets de différents types.

    Serait-ce dû au fait que certaines bibliothèques standard ont besoins de ces opérateurs pour n'importe quel pointeurs et que si on laissait à l'utilisateur la possibilité de changer le comportement de l'opérateur on ferait tout planter ?

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Nulle part dans le langage on permet de remplacer une opération définie par le langage. Le plus proche est le remplacement des opérateurs new et delete globaux, qui relève de la bibliothèque.

  7. #7
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 17/12/2007, 10h13
  2. redéfinition d'opérateur STL
    Par eklips dans le forum SL & STL
    Réponses: 4
    Dernier message: 19/10/2007, 22h57
  3. surcharge d'opérateur et pointeur
    Par cyril_sy dans le forum C++
    Réponses: 3
    Dernier message: 24/08/2007, 17h19
  4. Erreur de lien : redéfinition d'opérateurs
    Par poukill dans le forum C++
    Réponses: 3
    Dernier message: 02/07/2007, 15h44
  5. redéfinition des opérateurs en C++
    Par apan dans le forum C++
    Réponses: 11
    Dernier message: 27/03/2006, 15h58

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