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 :

Symétrie de la surcharge d'un opérateur


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut Symétrie de la surcharge d'un opérateur
    Bonjour !

    Je suis en train d'implémenter une petite classe de matrice (et oui encore une !) dans mon programme. J'aurais une question sur la symétrie des opérateurs, je m'explique.

    Si j'écris par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    template <class T> class cMatrice{
    public: 
    cMatrice<T> operator * (vector<double> &V)......
    cela suppose que l'on effectue le produit M*V. Seulement évidemment si on veut faire le produit V*M, et ben on a un souci. Le problème est le même si je veux simplement faire le produit d'un double avec une matrice.

    Je ne sais pas si j'arrive à expliquer mon problème...
    En tout cas, vos idées et suggestions éclairées sont les bienvenues !

    Ah oui j'allais oublier, le plus important presque....
    La déclaration et l'implémentation se font toutes deux le header car ma classe est une classe faisant appel aux template et donc je ne peux pas déclarer mes méthodes dans un .cpp donc en gros, je ne peux pas implémenter un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaClasse operator * (double NB, vector<double> &V)
    MaClasse operator * (vector<double> &V, double NB)

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par androz Voir le message
    Bonjour !

    Je suis en train d'implémenter une petite classe de matrice (et oui encore une !) dans mon programme. J'aurais une question sur la symétrie des opérateurs, je m'explique.

    Si j'écris par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    template <class T> class cMatrice{
    public: 
    cMatrice<T> operator * (vector<double> &V)......
    cela suppose que l'on effectue le produit M*V. Seulement évidemment si on veut faire le produit V*M, et ben on a un souci. Le problème est le même si je veux simplement faire le produit d'un double avec une matrice.

    Je ne sais pas si j'arrive à expliquer mon problème...
    En tout cas, vos idées et suggestions éclairées sont les bienvenues !

    Ah oui j'allais oublier, le plus important presque....
    La déclaration et l'implémentation se font toutes deux le header car ma classe est une classe faisant appel aux template et donc je ne peux pas déclarer mes méthodes dans un .cpp donc en gros, je ne peux pas implémenter un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaClasse operator * (double NB, vector<double> &V)
    MaClasse operator * (vector<double> &V, double NB)
    Fonction libre : J'ai pour surcharger mon opérateur la possibilité d'utiliser une fonction membre ou une fonction libre, que choisir ?
    + inline si tu dois tout avoir dans ton .h.

  3. #3
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par androz Voir le message
    Ah oui j'allais oublier, le plus important presque....
    La déclaration et l'implémentation se font toutes deux le header car ma classe est une classe faisant appel aux template et donc je ne peux pas déclarer mes méthodes dans un .cpp donc en gros, je ne peux pas implémenter un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaClasse operator * (double NB, vector<double> &V)
    MaClasse operator * (vector<double> &V, double NB)
    Je ne vois pas pourquoi, ca se fait tout les jours et sans .cpp.

    ton operator* a tout interet à:
    1/ etre implanter comme fonction libre
    2/ etre implanter via *=

  4. #4
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Citation Envoyé par Joel F Voir le message
    ton operator* a tout interet à:
    1/ etre implanter comme fonction libre
    2/ etre implanter via *=
    Je mettrai plutôt :

    2/ être implanté via un "expression template"

  5. #5
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Je mettrai plutôt :

    2/ être implanté via un "expression template"
    je sais bien masi je pense que c'est un poil out of scope pour le PO.

  6. #6
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Salut

    Merci pour vos réponses, mais en fait j'ai voulu delester le post car j'ai trouvé ma solution juste apres avoir posté.... comme d'hab quoi

    Bref, j'implémentais mon operateur avec une fonction membre, d'ou la perte de symétrie évidemment, donc la solution était bien sur de l'implémenter en fonction libre. De plus, je l'implémente deja en expression template, mais c'était pour l'exemple histoire de pas compliquer ma question de depart

    Merci a vous !

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par androz Voir le message
    Merci pour vos réponses, mais en fait j'ai voulu delester le post car j'ai trouvé ma solution juste apres avoir posté.... comme d'hab quoi
    Il vaut mieux la marquer résolue et indiquer la solution pour servir de base de connaissances à d'autres qui pourraient avoir un problème similaire.

  8. #8
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    C'est pas idiot, j'y penserai la prochaine fois ! Thks

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

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  2. Réponses: 8
    Dernier message: 29/08/2006, 00h56
  3. [C#] Surcharge de l'opérateur ==
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2006, 16h19
  4. Réponses: 6
    Dernier message: 12/07/2006, 15h34
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

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