Partage
  • Partager sur Facebook
  • Partager sur Twitter

Surcharge d'operateurs et theorie

    12 octobre 2007 à 0:14:43

    Bonjour a tous, me revoila a la charge pour de nouvelles questions de type theorique sur la surcharge d'operateurs en C++.
    C'est pas passionnant mais bon c'est un passage oblige pour bien comprendre la logique des programmes complexes!
    Ci-dessous des extraits de questions recommandees par l'universite pour une etude autonome du C++:

    1/ Nous avons une classe Complex qui represente des nombres complexes (x+iy) et on surcharge l'operateur "-" de la facon suivante:
    1. const Complex operator-() const {
    2.      return Complex(-_re , -_im);
    3. }


    On me propose deux autres implementations, et on me demande leurs defauts par rapport a la 1ere:
    1. const Complex& operator-() const {      
    2.     _re = -_re;
    3.     _im = -_im;
    4.     return *this;
    5. }
    6. const Complex& operator-() const {
    7.     Complex* c_ptr = new Complex(-_re, -_im);
    8.     return *c_ptr;
    9. }


    2/ On implemente l'operateur + comme une fonction friend :
    1. friend const Complex operator+ (const Complex &c1, const Complex &c2);


    Pourquoi la definition de cette fonction comme fonction membre (et non pas friend) aurait echoue? (
    1. const Complex operator+(const Complex &c);

    Si possible donner un exemple...

    3/ On propose une autre implementation de l'operateur "-" comme fonction globale friend:
    friend const Complex operator-(const Complex &c)
    Est-ce que ce code passera sans probleme?

    4/ Expliquer pourquoi il est preferable d'utiliser : c1 *= c2 au lieu de c1 = c1*c2; (c1, c2 de type Complex).

    =====================================================================
    On decide maintenant d'implementer notre propre classe d'objets string (MyString) qui comprend
    - pointeur vers char (char*)
    - size
    - memoire pour le tableau de char est alloue dynamiquement.

    Les questions sont les suivantes:
    1/ Doit on obligatoirement implementer par nous meme un operateur de copie (operator=) ou peut on se contenter de l'operateur par defaut?

    2/ Supposons que l'on veuille implementer l'operator= de la facon suivante:
    MyString& operator=(const MyString &n1)
    Cet operateur effectue un delete de la memoire deja alloue et alloue de la memoire pour le nouveau tableau de chars, met a jour le size.
    Expliquez quel est le probleme pose par le code suivant:
    MyString n1("my string");
    n1 = n1;
    Proposez un moyen de corriger ce probleme.


    Merci beaucoup d'avance pour toute aide...
    • Partager sur Facebook
    • Partager sur Twitter
      12 octobre 2007 à 1:09:44

      Tu sais qu'aucun forum n'est là pour faire tes exos à ta place ?

      Si tu nous disais plutôt quelles sont tes réponses, si tu veux une correction.
      • 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.
        12 octobre 2007 à 9:23:18

        Citation : lmghs

        Tu sais qu'aucun forum n'est là pour faire tes exos à ta place ?


        Citation : cyberjoac

        Ci-dessous des extraits de questions recommandees par l'universite pour une etude autonome du C++:



        J'aimerais que les gens ne fassent pas ce genre de remarque quand quelqu'un fait preuve de bonne volonté.
        • Partager sur Facebook
        • Partager sur Twitter

        Ancien validateur du SdZ.

          12 octobre 2007 à 9:42:36

          <HS>Cela reste un exo, et le minimum qu'il puisse faire c'est de proposer des réponses. Histoire qu'on lui propose une correction (il y avait 2 phrases dans mon message)
          Qu'il ne soit pas étonné s'il n'a aucune réponse, que cela soit ici, sur developpez (multipost), ou un quelconque autre endroit.</HS>

          Au fait le compilo a plusieurs des réponses.
          • 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.
            12 octobre 2007 à 13:45:16

            Une personne tres devouee m'a beaucoup aide pour repondre aux questions...
            Cependant je bloque tres serieusement sur les questions 2 et 3 de la premiere partie de l'exo.

            Mes idees sont les suivantes mais pouvez vous me corriger svp:
            2/ La definition en tant que friend permet d'acceder a tous les fields private des deux objets tandis qu'en tant que fonction membre on ne pourra pas faire cela (je doute fortement que ce soit la bonne reponse).

            3/ Je ne comprends pas la question..

            SVP aidez moi!!
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              12 octobre 2007 à 18:01:26

              /3 : (je suis pas sur, donc pardon si c'est faux) Comme tu n'est pas dans ta classe Complex quand tu appelles cette fonction, tu ne possède qu'un objet Complex : celui passé en paramètre. Et pour une soustraction il faut toujours deux "objets" pour que ça soit "effectuable".

              /2 : tu dis qu'un fonction membre ne peux pas accéder à sa partie private (soit très souvent ses attributs). C'est pas très pratique si c'était vrai ;) .
              Mais je ne vois pas le problème... Faut avouer que je ne suis ni calé avec les opérateurs et les "friends", je ne fais que débuter dans le domaine.
              • Partager sur Facebook
              • Partager sur Twitter

              Surcharge d'operateurs et theorie

              × 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