cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
11 août 2011 à 15:56
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024
-
11 août 2011 à 16:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 11 août 2011 à 16:31
Hello,
Idem que CptPingu: pas d'originalité comparé au autre code présent sur le site.
Une petite erreur de frappe dans le main:
if(c4 == c1)
cout << "No Equality" << endl;
--> si c'est égal alors...ce n'est pas égal :D
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 11 août 2011 à 16:14
C'est bien de faire un: Complex *c3 = new Complex(3,3);
Mais le "delete c3;", il est où ?
imed07
Messages postés5Date d'inscriptiondimanche 25 février 2007StatutMembreDernière intervention11 février 2012 11 août 2011 à 16:11
Elle est ou la fuite mémoire ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 11 août 2011 à 15:56
Quel est l'intérêt de cette classe par rapport à un vrai std::complex (dans #include <complex>) ?
Le code est parfois inélégant, la classe n'est pas très poussée (pas de template, donc pas de choix du type à utiliser). On est très très loin de la propreté et de l'élégance du type "complex" de la STL.
Critique du code:
- Évite les using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace - On évite généralement d'utiliser this->, puisqu'il est inutile. On écrit un attribut de classe avec un différencieur. Ex: double real; => double _real;
this-> est utile en PHP, et souvent utilisé en Java. Le C++ n'est ni du PHP ni du Java.
- En C++ un header prend l'extension .hh ou .hpp, le .h étant réservé au C.
- Dans un constructeur on utilise la liste d'initilisation dès que possible, plutôt que de tout assigner dans le corps du constructeur.
- Lorsque l'on est dans une classe, on peut accéder de manière publique aux membre d'une autre classe de même type. Donc this->imaginary*c.getImaginary(); => _imaginary * c._imaginary;
- Lorsque l'on a un booléen, il suffit de le retourner, inutile de vérifier si vrai est vrai, ou si faux est bien faux...if ((this->real c.getReal()) && (this->imaginary c.getImaginary()))
return true;
return false;
> devient en propre:return _real c._real && _imaginary c._imaginary;
- Parenthèses inutiles, si tu connais la priorité des opérateurs...
- Un main propre ce n'est pas: "void main()" mais "int main()". Je te rappelle que la plupart es OS se servent de la valeur de retour du programme...
- Pas besoin de faire des milliers de cout, on peut enchainer les opérations.
Ex:
cout << "----------------" << endl;
cout << c1 << endl;
cout << c2 << endl;
cout << *c3 << endl;
cout << c1+c2 << endl;
- Il y a même une fuite mémoire dans ton exemple...
Pour conclure:
* Pas d'originalité, il existe déjà des milliers de classe complex sur ce site (Merci d'ailleurs de vérifier avant de poster)
* Code pas extra-ordinaire, bourré de mauvaises pratiques
* Classe peu évolutive (un template s'y prettait pourtant bien)
* Aucun avantage par rapport à un std::complex qui est déjà dans la STL (http://www.cplusplus.com/reference/std/complex/complex/operators/)
C'est un code que je ne recommande absolument pas !
11 août 2011 à 16:31
Idem que CptPingu: pas d'originalité comparé au autre code présent sur le site.
Une petite erreur de frappe dans le main:
if(c4 == c1)
cout << "No Equality" << endl;
--> si c'est égal alors...ce n'est pas égal :D
11 août 2011 à 16:14
Mais le "delete c3;", il est où ?
11 août 2011 à 16:11
11 août 2011 à 15:56
Le code est parfois inélégant, la classe n'est pas très poussée (pas de template, donc pas de choix du type à utiliser). On est très très loin de la propreté et de l'élégance du type "complex" de la STL.
Critique du code:
- Évite les using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- On évite généralement d'utiliser this->, puisqu'il est inutile. On écrit un attribut de classe avec un différencieur. Ex: double real; => double _real;
this-> est utile en PHP, et souvent utilisé en Java. Le C++ n'est ni du PHP ni du Java.
- En C++ un header prend l'extension .hh ou .hpp, le .h étant réservé au C.
- Dans un constructeur on utilise la liste d'initilisation dès que possible, plutôt que de tout assigner dans le corps du constructeur.
- Lorsque l'on est dans une classe, on peut accéder de manière publique aux membre d'une autre classe de même type. Donc this->imaginary*c.getImaginary(); => _imaginary * c._imaginary;
- Lorsque l'on a un booléen, il suffit de le retourner, inutile de vérifier si vrai est vrai, ou si faux est bien faux...if ((this->real c.getReal()) && (this->imaginary c.getImaginary()))
return true;
return false;
> devient en propre:return _real c._real && _imaginary c._imaginary;
- Parenthèses inutiles, si tu connais la priorité des opérateurs...
- Un main propre ce n'est pas: "void main()" mais "int main()". Je te rappelle que la plupart es OS se servent de la valeur de retour du programme...
- Pas besoin de faire des milliers de cout, on peut enchainer les opérations.
Ex:
cout << "----------------" << endl;
cout << c1 << endl;
cout << c2 << endl;
cout << *c3 << endl;
cout << c1+c2 << endl;
Devient:
std::cout << "----------------\n"
<< c1 << std::endl
<< c2 << std::endl
<< *c3 << std::endl
<< c1+c2 << std::endl;
- Il y a même une fuite mémoire dans ton exemple...
Pour conclure:
* Pas d'originalité, il existe déjà des milliers de classe complex sur ce site (Merci d'ailleurs de vérifier avant de poster)
* Code pas extra-ordinaire, bourré de mauvaises pratiques
* Classe peu évolutive (un template s'y prettait pourtant bien)
* Aucun avantage par rapport à un std::complex qui est déjà dans la STL (http://www.cplusplus.com/reference/std/complex/complex/operators/)
C'est un code que je ne recommande absolument pas !