Salut,
Citation:
Envoyé par
PierroVsf
Je suis d'avis qu'il faut connaître le C pour bien utiliser le C++, et qu'il ne faut pas séparer ces deux langages.
Permet moi de ne pas être d'accord avec toi (et d'argumenter sur ce point en sus):
De nombreuses techniques issues du C, indispensables en C sont purement et simplement nocives et contre productives en C.
Tout ce qui rattache le C++ au C, c'est la syntaxe (et encore, on ne peut le dire que pour le sous ensemble commun entre C et C++), autrement, ce sont deux langages fondamentalement différents, à l'instar du latin de Jules Cesar et du français actuel.
Je ne nie absolument pas l'intérêt que peut apporter la connaissance du latin de Jules Cesar dans la compréhension que l'on peut avoir du français moderne, tout comme je ne nie pas l'intérêt qu'il peut y avoir à connaitre le C pour comprendre les rouages du C++.
Par contre, tu conviendra avec moi que la connaissance du latin de Jules Cesar ne peut absolument pas être considérée comme un prérequis à l'apprentissage du français moderne, autrement, nous n'apprendrions pas à parler avant la première année de collège!!!
Et si tu convient de cela pour le latin et le français, tu dois également en convenir pour ce qui concerne le C et le C++. Simplement parce que ce sont des langages fort proches, mais fondamentalement différents ;)
Citation:
Personnellement lorsque que j'ai commencé à passer du C au C++, j'était méfiant, J'allais jusqu'à faire des sorties assembleur avec gcc pour voir les différences entre le code C et le code
Mmmhh... Oui, en fait, passons... C'est à vrai dire une excellente chose que de s'interroger sur l'efficacité des outils mis à sa disposition ;)
Citation:
Ainsi je pense qu'il vaut mieux apprendre le C pour mieux comprendre le C++.
Nuançons un peu les choses : si tu veux comprendre l'intérieur des rouages du C++, la connaissance de C t'y aidera très certainement.
Mais le fait est que, sauf exception, il n'y a absolument aucune raison de s'intéresser réellement au rouages du C++. dans la plupart des cas, on se contente d'utiliser les fonctionnalités "de surface" qu'il nous propose; tout comme on se contente généralement d'utiliser fopen (et autre fonctions associées aux fichiers) sans commencer à s'inquiéter de la composition réelle de la structure FILE et de la manière dont elle est traitée par les dites fonctions ;)
Mieux (ou pire, c'est selon) encore : la gestion dynamique de la mémoire est un processus qu'il est indispensable d'assimiler très rapidement en C; on n'a purement et simplement pas le choix. Mais c'est un processus particulièrement complexe à comprendre, à assimiler et, surtout, à maitriser suffisamment en C++ pour éviter les catastrophes (un peu moins en C, grâce à l'absence de système d'exceptions, comme on en retrouve en C++)
Or, C++ nous permet de postposer toute la problématique jusqu'à un moment où l'on en aura vraiment besoin (lorsqu'il commence à être question d'héritage et de polymorphisme), nous permettant d'attendre de nous être approprié un minimum le langage et d'avoir acquis un minimum d'expérience avant de devoir nous frotter au problème.
Cela rend la courbe d'apprentissage beaucoup plus facile à suivre ;)
Citation:
De plus je trouve inutile de débuter le c++ en apprenant les dernières spécificité de celui-ci, je pense par exemple à la manipulation des strings, ou au constructeur qui accepte une liste d'initialisation définie à l'aide des crochets.Pour moi ces propriétés relèvent plus du gadget.
Sur ce point non plus, je ne suis pas d'accord.
La manipulation des chaines de caractères est un véritable calvaire en C. A moins, bien sur, de définir une taille arbitraire une bonne fois pour toutes pour tes chaines de caractères... Avec tous les problèmes que cela sous-entend ;)
Or l'utilisation et la manipulation des chaines de caractères est une constante dans tout programme : tôt ou tard, on voudra récupérer, afficher ou transmettre une information sous cette forme. La classe std::string (et ses consoeurs) nous permet de manipuler ce genre de donnée en nous concentrant sur les manipulations que nous devons faire au lieu de passer notre temps à nous inquiéter de savoir si "mais aurai-je assez d'espace pour stocker tout cela".
L'utilisation des accolades pour les listes d'initialisateurs est loin d'être un gadget, mais permet de résoudre une problématique réelle. un simple exemple : que fait, à ton avis un code proche de
Code:
1 2 3 4 5 6
| class MaClasse{
/* on se fout pas mal du contenu
};
int main(){
MaClasse foo();
} |
Le résultat n'est absolument pas ce que tu pourrais croire à la première lecture et en suivant ta première intuition ;)
Citation:
Le C++ ne se réduit pas à ses fonctionnalités de manipulations de caractère...
sur ce point, au moins, nous sommes d'accord ;)
Mais la conclusion que l'on en tire est radicalement différente :boom:
Car il faut te dire que la manipulation de chaine de caractères est une constante importante de n'importe quel programme, développé dans n'importe quel langage. En particulier lorsqu'il est question de transmettre des informations à l'utilisateur ;)
Citation:
En C est ce que j'utilise des pointeurs de fonctions à tout bout de champ? Non! -> Pas de fonctions virtuelles en C++.
Pas de fonction virtuelle-->pas d'héritage -->soit de sérieux problèmes de conception, soit, tu te limites vraiment dans l'utilisation des possibilités offertes par le langage (et, s'il n'était question que de cela, tu aurais sans doute intérêt à rester en C qui est malgré tout moins complexe ;) )