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 des opérateurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut Surcharge des opérateurs
    Bonjour,

    Je peine à comprendre à quoi sert la surcharge des opérateurs, quelle utilité ? Qu'est-ce que ça apporte ?

    Est-ce que quelqu'un pourrait me donner une explication facile avec un exemple ?

    Merci pour votre aide.

  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
    Il y a plusieurs situations dans lesquelles surcharger des opérateurs est pratique:
    1. La surcharge de operator=
    2. la surcharge des opérateurs de flux (<< et >>)
    3. Pour des objets mathématiques: nombres complexes (std::complex), position et vecteur, matrices, polynomes, fonctions...
    4. Pour foncteurs, c'est à dire des classes ayant un opérateur d'appel de fonction.
    5. Pour des conteneurs d'objets. Par exemple un quad-tree ou un octree
    6. Pour des pointeurs intelligents


    Les objets mathématiques utiliseront les opérateurs mathématiques (+, -, *, ...) et leurs composés (+=)
    L'avantage, c'est de ne pas écrire un code tel que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    vector2d u(1, 0), v(0, 1);
    point2d a(7,5), b(8,3);
    vector2d d = a.moins(b);
    vector2d diff = difference(a, b);
    vector2d deplacement = somme ( somme(produit(2,u), oppose(v)), diff);
    point2d source (11, 34);
    point2d frere = source;
    frere.décaler(deplacement);
    mais quelque chose d'autrement plus clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    vector2d u(1, 0), v(0, 1);
    point2d a(7,5), b(8,3);
    vector2d d = a-b;
    vector2d diff = a-b;
    vector2d deplacement = ( (2*u)+ -v) + diff;
    point2d source (11, 34);
    point2d frere = source;
    frere += deplacement;
    Les foncteurs servent dans les algorithmes, et peuvent par exemple s'écrire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename T>
    struct less {
        constexpr bool operator()( const T& lhs, const T& rhs ) const {return a < b;}
    };
    Note qu'il s'agit précisément de std::less (tel que défini en C++14).

    Pour les conteneurs d'objets, comme une matrice, par exemple, on aura probablement l'un des opérateurs [] ou ().
    Pour les pointeurs intelligents, en général, ce sont * et -> qui sont redéfinis.

    Il y a d'autres usages, c'est certains, mais ce sont les principaux.

Discussions similaires

  1. surcharge des opérateurs
    Par Arson dans le forum C++
    Réponses: 9
    Dernier message: 30/05/2008, 11h40
  2. Réponses: 2
    Dernier message: 11/01/2008, 10h40
  3. Réponses: 7
    Dernier message: 02/12/2007, 21h43
  4. Surcharge des opérateurs ?
    Par kedare dans le forum Ruby
    Réponses: 3
    Dernier message: 06/11/2006, 23h47
  5. Variables polyvalentes et surcharge des opérateurs
    Par Antoine_935 dans le forum C++
    Réponses: 14
    Dernier message: 08/09/2006, 12h38

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