Bonjour à tous.
Je suis à la recherche d'un job, et donc, je me retrouve confronté aux tests techniques, dont certaines questions feraient hurler nos compilateurs adorés.
L'une d'entre elles me tracasse particulièrement:
supposant une classe Complexe représentant un nombre complexe.
Choisissez la meilleur implémentation de l'addition:
- Complexe& operator+(Complexe const & a, Complexe const & b) {return Complexe(a.re+b.re, a.im+b.im);}
- Complexe& operator+(Complexe const * a, Complexe const * b) {return Complexe(a->re+b->re, a->im+b->im);}
- Complexe* operator+(Complexe const & a, Complexe const & b) {return new Complexe(a.re+b.re, a.im+b.im);}
- Complexe* operator+(Complexe const * a, Complexe const * b) {return new Complexe(a->re+b->re, a->im+b->im);}
J'aurai personnellement définit:
1 2
| Complexe operator+(Complexe const & a, Complexe const & b) {Complexe c(a); return c+=b;}
Complexe& Complexe::operator+=(Complexe const& other) {re+=other.re; im+=other.im;} |
ou encore, si on veut rester concis (mais il faut être friend...)
Complexe operator+(Complexe const & a, Complexe const & b) {return Complexe(a.re+b.re, a.im+b.im);}
Dans le même genre, une autre fois je trouve int& f(int a, int b) {return a+b;}Je croyais qu'on ne devait jamais retourner une référence sur une constante ou une temporaire…
Qu'en pensez-vous? Suis-je dans l'erreur?
Partager