Tout le monde parle du C++ comme un langage dur parce que complet et performant. Il a une grande popularité parce qu'il est difficile.
Mais en réalité, les gens l'aiment parce que justement ils peuvent faire les malin de connaître le C++.
Pour moi, il est loin d'être parfait, j'ai commencé avec le C, puis le C++, puis je suis passé sur d'autres langages comme Delphi et C# et je me suis rendu que ça ne sert à rien qu'un langage soit compliqué. On peut faire tout aussi bien, même mieux avec un langage plus simple en se prenant moins la tête et plus rapidement.
Pour moi, un des gros points noirs du C++ est la construction statique des objets. A quoi ça sert ? Ca utilise des constructeurs par défaut et destructeurs sans qu'on ne s'en rende compte, sans qu'on ne les appelle.
Il est tout à fait possible et utile de ne faire que des constructions dynamiques, on appelle explicitement le constructeur et le destructeur. On sait exactement ce qui se passe, on maîtrise le processus de création des objets, du début à la fin.
Combien de programmeurs se sont pris la tête pour comprendre quand quel constructeur est appelé à quel moment ? Qui n'a jamais utilisé de variable globale qui compte le nombre d'appel de constructeurs pour savoir exactement combien de fois il est appelé ? C'est un exercice typique lors de l'apprentissage du C++.
Beaucoup d'autres langages POO n'ont pas de construction statique automatisée, ils n'ont d'ailleurs même plus de pointeurs, tout passe par référence. On déclare une référence de classe, puis on créé l'objet si on le désire ou bien on référence un objet déjà construit.
Les pointeurs ne sont pas utiles non plus, ils permettent de faire tellement d'erreurs et de segmentation fault. Tout passer par référence fonctionne très bien. Ce soucis vient du fait que le C++ dérive du C et qu'en C on est obligé d'utiliser les pointeurs car les références n'existent pas. Il a donc gardé les pointeurs.
Vous me direz "pourquoi on les utilise si souvent alors si ce n'est pas utile ?"
Je vous répondrais "Pourquoi tant de langages n'utilisent que des références et jamais aucun programmeur n'a eu de problème avec et n'a demandé que les pointeurs existent ou a voulu changé de langage pour retrouver les pointeurs ?"
En Delphi, les pointeurs existent encore, en 2 ans, je m'en suis servi peut-être 2x pour utiliser du vieux code qui les utilisait encore. Il est déconseillé de les utiliser et on n'en a pas besoin.
Donc nous avons déjà vu que le C++ utilisait des choses inutiles et complexes, mais pire, il ne possède certains aspects de la POO forts utiles, les property.
En POO, il est conseillé de mettre tous les champs en private ou protected afin d'utiliser des Get et des Set pour protéger les données des utilisateurs lambda. C'est ce qu'on appelle l'encapsulation.
Les property permettent de simuler un champ en public qui appellerait le Get s'il est en lecture ou le Set s'il est en écriture. C'est un niveau supérieur d'abstraction et d'encapsulation qui permet d'avoir un code plus lisible.
Avec les property, les 2 codes sont équivalents, on appelle le Get et le Set en fonction du besoin.
Il y a d'autres points que je ne maîtrise pas comme les assertions qui n'existent pas, donc je n'en parlerai dans ce sujet.
Voilà quelques raisons qui font que je n'ai pas envie de revenir au C++ mais plutôt de me tourner vers de nouveaux langages comme le C#.
Bien entendu, ceci est l'ouverture d'un débat (et je n'espère pas d'un troll) sur les désavantages du C++. Un débat qui n'a presque jamais lieu.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Pour moi non plus C++ n'est pas parfait. D'ailleurs, peut-on parler de langage parfait ?
pac dit : Pour moi, un des gros points noirs du C++ est la construction statique des objets
C'est assez déroutant en effet. Il faut s'y habituer... Cependant, les objets qui ne sont pas des valeurs (built-in like types) ne devrait pas se trouver sur la pile, mais sur le tas. Autant le constructeur par défaut de std::string n'a rien de gênant, autant un constructeur lambda pour un type défini par l'utilisateur est moins bien venu.
pac dit : Beaucoup d'autres langages POO n'ont pas de construction statique automatisée, ils n'ont d'ailleurs même plus de pointeurs, tout passe par référence. On déclare une référence de classe, puis on créé l'objet si on le désire ou bien on référence un objet déjà construit.
Derrière la notion de référence, il y a celle de pointeur. Il n'y a dans ces langages aucune différence. En C++, il en existe une : une référence est un alias de nom, un pointeur est une adresse sur le tas (mémoire dynamique). En Java par exemple, une référence "pointe" sur une adresse du tas, mais cela est transparent au programmeur.
pac dit : Les pointeurs ne sont pas utiles non plus, ils permettent de faire tellement d'erreurs et de segmentation fault. Tout passer par référence fonctionne très bien.
Les pointeurs sont la seule manière en C++ d'avoir un objet persistant en mémoire. Les erreurs de segmentations en C++ sont très rares, du fait que de nombreuses classes ont été écrites justement pour permettre d'éviter les accès hasardeux au tas.
pac dit : les properties
Tu parles de C#, que je connais peu.
pac dit : Il est plus joli d'écrire :
C'est très subjectif...
__________________________
Lisp : (have a (nice day))
C : have (a, nice, day);
C++/Java : have.aNice(day);
OCaml : have a nice day;;
shell : have a nice $day
Je suis d'accord que les références sont des pointeurs masqués, mais avec les références, on peut travailler de la même façon et avoir un code plus lisible.
Tu me diras que c'est subjectif, tout est question d'habitude. Mais pour quelqu'un qui de se mettre aux pointeurs ou aux références, il galèrera moins avec les références.
Il existe tout de même un point où les pointeurs sont indispensables, c'est pour faire des tableaux dynamiques.
Les properties existent aussi dans d'autres langages que le C#comme en Delphi par exemple, d'ailleurs les similarités entre le C# et Delphi ne s'arrêtent pas là car ils ont le même concepteur (un homme de génie) mais le sujet n'est pas sur ce point.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Je croi que tu a tord de sous estimer le langague C/C++.
Tout dépent de ce quel genre d'application tu désire crée.
Si tu préfere programmer des applications Windows, ben la,
c sur que Delphi ou C# sont peut etre mieux adapter pour
faire ca, et en beaucoup moin de temp, je te l'accorde, mais en
terme de vitesse, le C/C++ est bien plus rapide
que les languages de plus haut niveau. Et rien ne t'empeche d'utiliser
une dll ecrite en C++ dans un programme ecrit dans un de ces language.
Et pour ce qui est des pointeurs, il sont très utiles, car il rendre l'ecriture
de code complexe plus facile une fois qu'on l'ai a maitriser.
Croit tu que les programmeurs de jeux peuvent se permette
la lenteur des programmes ecrit en delphi ou en C# pur...
Ca peut marcher certe pour des petit project mais pour un gros
jeu, oublie ca, ca s'ecrit en C/C++ et pas autre chose...
En termes de performances pures, on parle toujours du C/C++ comme étant le must sans jamais apporter d'explications et tout le monde le prend pour argent comptant sans jamais aller vérifier. J'aimerais bien un jour que quelqu'un m'explique si effectivement il est plus performant et si c'est le cas pourquoi.
Parles-t-on encore de nanosecondes gagnées ?
Il existe beaucoup de librairies graphiques portant sous d'autres langages que le C et le C++ comme la SDL ou openGL qui existent par exemple en C#.
Le fait de pouvoir utiliser des pointeurs sans encapsulation qui vérifie les types et empêche les débordements de mémoire ou écriture de données n'importe où dans la mémoire n'est pas en soit une avancée qui garantie une vitesse d'exécution plus grande.
Et même si le C++ est plus rapide, ça n'enlève en rien ce qui est dit dans le tout premier post, il pourrait très bien être rapide et ne pas posséder les inconvénients précités.
Je voudrais qu'on arrête de dire que les programmes écrits en Delphi et C# sont lents car ce n'est pas le cas. Ceux écrits en Delphi sont compilés tout comme les programmes écrits en C++, c'est donc du code machine qui est exécuté. Je travaille en Delphi et les performances sont importantes, si on avait un concurrent 2x plus rapide parce qu'il était en C++, on serrait obligé de changer de langage, mais ce n'est pas le cas, nos temps sont dans les ordres de grandeur qu'on peut faire avec d'autres langages, sinon plus rapides sur certains points.
C'est trop facile de continuer à avancer des faux arguments passés dans l'inconscient collectif qui veut que le C++ est plus rapide.
Je vous propose une chose, faire un programme dans différents langages qui exécuterait une certain nombres d'opérations, avec compteur de temps. On fournit les sources et l'exécutable puis on compare les temps.
Le truc est de trouver des opérations pas trop élémentaires et assez évolués qui serraient significatives dans une application. Ensuite on pourra effectivement comparer les temps d'exécution des programmes en fonction du langage et je pense que certains seront surpris par les résultats.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Bon, ok, j'exagere un peu, mais, d'apres moi, pour un jeu,
on doit gagner au moin 5-20%. Mais la performance
importe peu quand il sagit d'un programme Windows
car il passe la plupart du temp a ne rien faire de toute facon.
Seule les fonctions importante du prog. on besoin d'un peu
plus effort sur l'optimisation, sans exagerer bien sur.
La ou le c++ se démarque, c'est ca "malèabilité".
Il y a plein de petit truc cool qu'on peut faire en C++ et qu'on ne
peut pas faire avec les autres. Et pour les erreurs de pointeurs,
il suffit d'etre attentif a ce que l'on fait et s'avoir ce servir du debogeur.
C tout. En fait j'aime autant le C++ que Delphi ou C#, mais je le repete
encore, tout depent du type d'application qu'on veut faire.
Si j'ai été vexé, c'est pas grave, c'est moi qui suis un peu soupe au lait ces temps ci.
vortex666 dit : La ou le c++ se démarque, c'est ca "malèabilité".
Il y a plein de petit truc cool qu'on peut faire en C++ et qu'on ne
peut pas faire avec les autres.
Ce serrait bien de justement nous donner ces petits trucs cool.
En ce qui concerne le petit concours sur la rapidité des langages, ça peut être intéressant de le lancer pour déjà rassembler un peu les programmeurs des différents langages mais aussi faire qqch ensemble (bon ok c'est la même chose).
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
pac dit : En termes de performances pures, on parle toujours du C/C++ comme étant le must sans jamais apporter d'explications et tout le monde le prend pour argent comptant sans jamais aller vérifier.
Ouais mais si on part comme ça, chacun devrait "vérifier" le fait que c'est la Terre qui tourne autour du soleil au lieu de le prendre pour "argent comptant".
C'est pas une analogie valable çà ... :S
__________________________
Sujet résolu ? Pensez à mettre le tag
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.
Pas forcément mais elle peut aider à comprendre que parfois il y a des choses tellement laborieuses et dures à vérifier qu' on peut faire confiance à ceux qui l'ont vérifié et prouvé avant, surtout si'ils sont nombreux.
"Oui mais où est la preuve que ça a été prouvé?" peut-être auriez-vous envie de me demander.
A mon avis, s'il y a autant de gros programmes qui sont écrits en C++ (WinXP, IE, Office, Visual Studio, Half-Life, Doom III, WoW, tous les jeux Microsoft, les moteurs de jeu des jeux de EA,...) c'est parcequ'en effet, c'est un langage rapide.
Ce n'est pas surprenant par ailleurs, du fait qu'il est fondé sur un langage bas niveau très rapide: le C.