Partage
  • Partager sur Facebook
  • Partager sur Twitter

Surcharge d'opérateur

opérateurs commutatifs

Sujet résolu
    17 mai 2007 à 19:38:30

    Bonjour à tous !

    Le nouveau cours sur la surcharge d'opérateur tombe à pic puisque j'ai un soucis avec ça !
    Le voici:

    J'ai créé une classe "Complexe" contenant des outils de manipulation de nombres complexes. Mon type "complexe" est défini par deux variables (partie imaginaire et partie réelle).
    Je voudrais implémenter un opérateur "*" pour multiplier un réel par un complexe.
    J'ai déjà fait complexe*réel, mais je voudrais que ce soit commutatif.

    complexe operator*(double reel);


    maintenant comment faire pour multiplier un réel par un complexe, sachant que ça doit aussi retourner un complexe ?

    Merci beaucoup ! :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      17 mai 2007 à 19:43:19

      Tu crées une fonction (pas une méthode donc) qui ressemblera à ça, tout simplement :

      complexe operator*(double reel, complexe cmplx)
      {
          return cmplx*reel;
      }
      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2007 à 19:44:36

        je suis pas sur de moi mais peut etre que si tu multiplie par le réel d'abord la partie réel du complexe puis sa partie imaginaire et le réunir apres.
        Enfin je suis pas sur de moi mais ca me semble une solution logique et pas trop compliqué
        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2007 à 19:50:58

          >>Dovery:

          oui ça c'est le principe mais mon problème est justement que le programme comprenne que je veux faire une multiplication d'un réel par un complexe et donc que ça appelle la bonne fonction sans mette
          complexe multiplication(double reel, complexe cplxe)


          >>Cyprien:

          super je n'avais pas pensé à ça !!

          merci pour vos réponses ! :)


          EDIT:
          Je suis allé un peu vite, ça ne fontionne pas, le compilateur me dit que l'opérateur * a trop de paramètres.
          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2007 à 20:11:54

            Cyprien a bien insisté sur le fait que tu dois mettre la >>>fonction<<< en dehors de la classe. Ce n'est pas une méthode.
            Et dans ce cas, tu dois écrire leréel*lecomplexe, cf la déclaration de ta fonction : l'argument réel est le premier de la liste des arguments.

            En gros ton opérateur doit être en dehors de la classe et doit retourner toncplx.operator*(tonreel)
            • Partager sur Facebook
            • Partager sur Twitter
              17 mai 2007 à 21:39:44

              ok merci.

              Dans un cours de C++, je viens de voir qu'il est possible de déclarer cette fonction dans la classe en utilisant "friend", en private.

              Je viens de tester cela fonctionne.
              Merci pour l'aide !
              • Partager sur Facebook
              • Partager sur Twitter
                17 mai 2007 à 23:20:43

                Oui, c'est souvent utilisé pour les operateurs.
                • Partager sur Facebook
                • Partager sur Twitter
                  18 mai 2007 à 14:01:48

                  Mauvaise approche.
                  La façon de canonique de procéder est la suivante
                  class T {
                  ...
                  public:
                     T& operator*=(V v) { .... ; return *this;}
                  };

                  T operator*(T const& lhs, V v) {
                      return T(lhs) *= v;
                  }
                  T operator*(V v, T const& rhs) {
                      return T(rhs) *= v;
                  }

                  Ce qui permet d'avoir une totale symétrie (pas le cas avec des opérateurs membres). Et nul besoin de sortir l'amitié quand elle n'apporte rien comme c'est le cas ici.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                  Surcharge d'opérateur

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown