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 :

Type de retour des surcharges d'opérateur


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 52
    Points
    52
    Par défaut Type de retour des surcharges d'opérateur
    Bonjour,

    J'ai lu sur un cours qu'il était possible de surcharger les opérateurs pour par exemple redéfinir la somme de deux objets. Toujours dans cet exemple, la somme de deux objets définissait donc un objet du même type.

    Ma question est : la somme de deux objets de même type peut-elle retourner un objet d'un autre type ?

    Objet obj1();
    Objet obj2();

    AutreObjet res = obj1 + obj2;

    Merci beaucoup.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par syl1405 Voir le message
    Bonjour,

    J'ai lu sur un cours qu'il était possible de surcharger les opérateurs pour par exemple redéfinir la somme de deux objets. Toujours dans cet exemple, la somme de deux objets définissait donc un objet du même type.

    Ma question est : la somme de deux objets de même type peut-elle retourner un objet d'un autre type ?

    Objet obj1();
    Objet obj2();

    AutreObjet res = obj1 + obj2;

    Merci beaucoup.
    Il est certainement possible de faire n'importe quoi. Je ne comprend pas la logique d'une telle chose
    mais le code suivant ne compilera pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Objet obj1();
    Objet obj2();
    Objet obj3();
    AutreObjet res = obj1 + obj2 + obj3;

  3. #3
    Membre confirmé
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Points : 533
    Points
    533
    Par défaut
    Bien sur, puisque c'est toi qui définit l'operateur +, tu peux définir ce que tu veux comme type de retour.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Tu peux faire retourner se que tu veux aux opérateur cependant conceptuellement c'est plutôt moyen (si tu ajoutes deux sommes d'argent et que tu obtiens un pingouin en retour c'est assez incohérent )

    cf l'entrée de la FAQ sur la sémantique de valeur et La surcharge d'opérateurs.

    [EDIT] Arf ! Doublement grillé [/EDIT]

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    il est effectivement possible de retourner ce que l'on veut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class C1 {};
    class C2 {};
    class C3 {};
     
    class C0 {
      public:
        C0 operator+(const C0 &) { return *this; }
        C1 operator+(const C1 & c1) { return c1; }
        C3 operator+(const C2 &) { return C3(); }
    };
     
    int main(int, char **)
    {
      C0 c0;
     
      c0 = c0 + c0;
     
      C1 c1;
     
      c1 = c0 + c1;
     
      C2 c2;
      C3 c3 = c0 + c2;
     
      return 0;
    }
    après attention à l'ordre d'exécution, mais si c'est genre ce qui est fait dans le cas de mélange float et int ou l'un des type gagne toujours alors c'est pas problématique

    [edit]pas besoin de me dire que les + ne font pas grand chose [/edit]
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par atttchoum Voir le message
    Bonjour,

    Tu peux faire retourner se que tu veux aux opérateur cependant conceptuellement c'est plutôt moyen (si tu ajoutes deux sommes d'argent et que tu obtiens un pingouin en retour c'est assez incohérent )

    cf l'entrée de la FAQ sur la sémantique de valeur et La surcharge d'opérateurs.

    [EDIT] Arf ! Doublement grillé [/EDIT]
    Merci pour ces informations. Je suis d'accord que la somme de deux objets doit a priori donner le même objet. Je ne comptais pas faire la somme de deux pièces pour faire un camion, mais plutot la somme de 2 pièces qui donne un billet ... ça reste dans la même idée de représentation mais un peu différent

    Je posais juste cette question pour creuser une éventualité ^^

    Merci encore !

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Ou la somme de deux scalaires qui donnent un complexe...

  8. #8
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Il n'y a pas de probleme a faire retourner une matrice pour la multiplication de deux vecteurs, mais le type retourne est determine statiquement. Il n'est pas possible de le changer suivant la valeur retournee.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ou la somme de deux matrices qui donne(/ait) une matrice_temporaire, voire un truc qui prend note du calcul à réaliser.

    Autre aspect "hétérogène" : date + duree -> date (et vice-versa)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Type de retour des procédure Stockée
    Par Solaren dans le forum Débuter
    Réponses: 1
    Dernier message: 27/01/2012, 11h09
  2. Type de retour des WebMethod
    Par oclone dans le forum Services Web
    Réponses: 2
    Dernier message: 11/06/2009, 15h57
  3. Réponses: 6
    Dernier message: 18/04/2009, 11h37
  4. Heritage et type de retour des methodes
    Par belfo dans le forum C++
    Réponses: 20
    Dernier message: 23/12/2006, 23h51
  5. reflexion et type de retour des méthodes
    Par money mark dans le forum Langage
    Réponses: 2
    Dernier message: 09/04/2006, 18h46

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