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 operateur Unaire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut Surcharge operateur Unaire
    Bonjour a tous,

    je me posais la question de comment surcharger proprement l'operateur unaire + et - dans une classe.

    J'ai le choix entre :
    Code MaClasse.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class MaClasse1	{
    	private:
                    //des propriétés
            public:
    		Point<T> & operator-(void);
            };
    et
    Code MaClasse.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class MaClasse2	{
    	private:
                    //des propriétés
            public:
    		Point<T> operator-(void) const;
            };
    Du coup je me demandais lequel était le plus rapide en temps calcul (bien qu'il me semble que le passage par référence le soit), et lequel est le plus facile d'utilisation pour l'utilisateur de la classe?

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Indépendamment du fait que l'opérateur soit unaire, le retour ne peut pas se faire par référence.

    Il s'agit de créer une nouvelle valeur, donc quelque chose dont le scope est la fonction operator-().
    Le seul retour par référence qui soit indiscutable est return *this;. On peut ensuite discuter du retour par référence constant d'un membre.

    D'une manière général les opérateurs #= retourneront *this par référence (non const) et les autres retourneront des valeurs. sauf sémantique différente, soigneusement documentée…

    Par ailleurs, ton operateur de négation créant une valeur il ne modifie pas l'objet lui-même, donc il sera const.

    Enfin, en C++, le void est totalement inutile dans les arguments d'une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<typename T> class Point	{
            /* des choses… */
            public:
    		Point<T> operator-() const {return Point<T>(-x, -y);}//par exemple
    };

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut
    Citation Envoyé par leternel Voir le message
    Indépendamment du fait que l'opérateur soit unaire, le retour ne peut pas se faire par référence.
    Merci pour ta réponse. En fait j'avais déduit la meme chose que toi grace a l'exemple d'utilisation suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void main()
    {
    Point ptA,ptB(1,1);
     
        ptA=-ptB;
    }
    Je ne dois pas modifier le point B, donc pas de référence et mettre la méthode en !
    Citation Envoyé par Bousk
    Merci pour le wiki! =) ça aide.

    Merci pour vos réponses clair!

    E.G

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Attention, le retour par référence est indépendant du const. et ne répond pas aux mêmes problème, ni aux mêmes contraintes.

    personnellement, comme pour les copié-collés, je déconseille fortement les retour par références qui ne soit pas le retour d'un argument pris en référence (non const) ou *this.

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

Discussions similaires

  1. surcharge operateur delete et héritage
    Par Hervé dans le forum C++
    Réponses: 5
    Dernier message: 29/03/2006, 13h59
  2. Surcharge operateur =
    Par rulianf dans le forum C++
    Réponses: 9
    Dernier message: 23/02/2006, 00h32
  3. [debutante] surcharge operateur <<
    Par norkius dans le forum Débuter
    Réponses: 3
    Dernier message: 24/10/2005, 12h20
  4. [Surcharge]Operateur<< avec une classe maison
    Par KeNnEdY dans le forum C++
    Réponses: 6
    Dernier message: 14/09/2005, 15h51
  5. surcharge operateur && pointeurs
    Par le y@m's dans le forum C++
    Réponses: 6
    Dernier message: 10/05/2005, 15h57

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