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:
On me propose deux autres implementations, et on me demande leurs defauts par rapport a la 1ere:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 const Complex operator-() const { return Complex(-_re , -_im); }
2/ On implemente l'operateur + comme une fonction friend :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 const Complex& operator-() const { _re = -_re; _im = -_im; return *this; } const Complex& operator-() const { Complex* c_ptr = new Complex(-_re, -_im); return *c_ptr; }
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? (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