Partage
  • Partager sur Facebook
  • Partager sur Twitter

Apprendre le C++

    15 novembre 2018 à 11:02:10

    Bonjour,

    Je me permet de créer ce topic pour vous demandez quel serait actuellement le meilleur tutoriel pour pouvoir apprendre le C++.

    J'ai entendu dire que le tuto sur openclassroom était un peu obsolète si l'on peut dire, mais d'après ce que je vois il semble être mis à jour.

    J'ai appris le C pour le moment grâce à openclassroom et j'en suis satisfait, j'ai juste du aller voir ailleurs pour la biblio SDL car le tuto était en SDL1.2, mais du coup pour le C++ j'aimerais bien savoir si vous avez des tuto assez récents et bien complet, bien pédagogique, ce serait sympa :)

    Peut-être que celui d'openclassroom est en fait à jour et que je me trompe :)

    • Partager sur Facebook
    • Partager sur Twitter

    Technicien informatique, Brevet de technicien supérieur Système Numérique.

      15 novembre 2018 à 11:05:47

      Lu'!

      BaptisteGouelle a écrit:

      Peut-être que celui d'openclassroom est en fait à jour et que je me trompe :)

      Non.

      Sur internet :

      En bouquin :

      • C++ Primer 5th Edition S.Lippman (en anglais).

      (Note une édition 6 est censée paraître en janvier selon Amazon).

      EDIT : Enfin, en tout cas, apprendre C++ juste après avoir appris C, tu vas en chier.

      -
      Edité par Ksass`Peuk 15 novembre 2018 à 11:37:03

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        15 novembre 2018 à 13:03:14

        C'est pas la bonne méthode?

        Apprendre le C++ juste après le C c'est pas conseillé? Je me suis dit comme le C++ c'est un C amélioré et plus complet, on fait le C puis le C++, sa me paraissait logique.

        Merci pour les liens, je suis sur Zestedesavoir pour l'instant.

        • Partager sur Facebook
        • Partager sur Twitter

        Technicien informatique, Brevet de technicien supérieur Système Numérique.

          15 novembre 2018 à 13:13:34

          BaptisteGouelle a écrit:

          (1) Apprendre le C++ juste après le C c'est pas conseillé? Je me suis dit comme (2) le C++ c'est un C amélioré et plus complet, on fait le C puis le C++, (3) sa me paraissait logique.

          (1) C'est clairement pas la voie la plus simple.

          (2) Pas du tout. C et C++ n'ont plus grand chose de commun aujourd'hui. Ils ont trop divergé. La seule chose qu'ils ont vraiment de commune aujourd'hui est qu'un compilateur C++ est capable de compiler un large sous-ensemble du langage C, mais pas tout, et ça ne veut pas dire que c'est acceptable d'écrire certains code C en C++.

          (3) Oui, ça paraît logique. Et c'est même colporté sur une quantité innombrable de ressources sur internet. Mais ce n'est pas du tout le cas. Ta difficulté numéro 1 : oublier C, complètement, au moins de le temps de ton apprentissage. En gros, à chaque fois que tu codes en C++, si tu commences à te dire "en C, j'aurai fait ...", tu oublies. Et tu regardes ce que te propose C++.

          Notamment :

          • les pointeurs de la forme "machin*" ont leurs cas d'usages, mais ils ne sont pas les plus courants,
          • allouer/désallouer manuellement la mémoire, c'est non, trop casse gueule en C++,
          • les macros, ça a ses cas d'usage, mais la majorité du temps en C++, c'est non.

          Ce sont à mon avis les trois points les plus importants, mais il y a certainement d'autres éléments.

          -
          Edité par Ksass`Peuk 15 novembre 2018 à 13:14:33

          • Partager sur Facebook
          • Partager sur Twitter

          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

            15 novembre 2018 à 13:29:07

            Ah d'accord, j'essayerais de faire tel quel alors. Effectivement pour l'allocation de mémoire, je remarque qu'on utilise plus malloc pour les tableaux mais vector, et oui pas mal de truc différent, mais en soit au niveau de la syntaxe et de l'indentation je veux dire, sa se ressemble quand même.
            • Partager sur Facebook
            • Partager sur Twitter

            Technicien informatique, Brevet de technicien supérieur Système Numérique.

              15 novembre 2018 à 13:39:15

              BaptisteGouelle a écrit:

              ..., mais en soit au niveau de la syntaxe et de l'indentation je veux dire, sa se ressemble quand même.

              C'est justement là le piège : la syntaxe est proche et en plus le langage va te laisser faire les mêmes choses la plupart du temps ... sauf que ce ne sera pas une bonne manière de faire très souvent.

              La syntaxe est un élément assez mineur d'un langage de programmation. Sinon on pourrait simplement dire que C, C++, Java et C# sont des langages très proches. Sauf qu'on se doute bien qu'on aurait pas créé des langages différents si c'était effectivement le cas.

              • Partager sur Facebook
              • Partager sur Twitter

              Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                19 novembre 2018 à 14:05:05

                (up, pour debloquer cette discussion, qui reste en haut du forum)
                • Partager sur Facebook
                • Partager sur Twitter
                  20 novembre 2018 à 9:47:07

                  Salut,

                  Personnellement je pense que connaitre C avant C++ n'est pas si mauvais que ça. La syntaxe est très proche. Je programme en C depuis 30 ans et je viens de passer au C++ assez facilement alors que j’ai beaucoup plus de mal à coder en python par exemple.

                  J'ai utilisé le livre "Programmez avec le langage C++" de M.Nera, le livre issu du cours d'openclassroom, en sautant la partie QT qui ne m’intéresse pas. Contrairement à ce que tout le monde semble dire, je le trouve très bien pour commencer et découvrir la programmation orientée objet, par contre il ne servira pas de livre de référence, c'est juste un livre pour se lancer.

                  Attention avec ce livre, il faut vraiment lire les chapitres complètement parce que l'auteur utilise de mauvais exemples avant d'indiquer comment bien faire (je me demande d’ailleurs si les personnes qui critique ce livre ne sont pas tombés que sur ces mauvais exemples).

                  Tu peux le compléter très vite avec une "Introduction au C++ 2011" http://sdz.tdct.org/sdz/introduction-a-c-2011-c-0x.html .

                  Ensuite quand tu t'es bien amusé, tu peux acheter un livre plus costaud genre "Primer" ou "C++ language" de Stroustup..

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 novembre 2018 à 10:11:59

                    ChristopheDrieu1 a écrit:

                    J'ai utilisé le livre "Programmez avec le langage C++" de M.Nera, le livre issu du cours d'openclassroom, en sautant la partie QT qui ne m’intéresse pas. Contrairement à ce que tout le monde semble dire, je le trouve très bien pour commencer et découvrir la programmation orientée objet, par contre il ne servira pas de livre de référence, c'est juste un livre pour se lancer.

                    Attention avec ce livre, il faut vraiment lire les chapitres complètement parce que l'auteur utilise de mauvais exemples avant d'indiquer comment bien faire (je me demande d’ailleurs si les personnes qui critique ce livre ne sont pas tombés que sur ces mauvais exemples).

                    On a lu le cours entièrement pour en faire la critique, pas quelques exemples au hasard. C'est une critique sur l'ensemble du livre, pas des passages.

                    Et tu programmes depuis 30 ans, ce qui n'est pas le cas de la majorité de ceux qui lisent ce cours. Tu auras peut être une lecture plus critique qu'un débutant (ce qui est discutable, tu as peut être quand même appris des conneries, sans le savoir), mais ce n'est pas le cas de la majorité des débutants (comme on le voit avec les questions qu'ils posent sur le forum).

                    Donc pas de raison de changer d'avis : ce cours est déconseillé.

                    EDIT :

                    ChristopheDrieu1 a écrit:

                    Personnellement je pense que connaitre C avant C++ n'est pas si mauvais que ça. La syntaxe est très proche.

                    Et je n'avais pas percuté sur ce passage.

                    On se base sur les questions et erreurs faites par les débutants. On se base sur 30 ans d'enseignement du C++. On se base sur les avis de nombreux spécialistes de l'enseignement du C++ (cf les groupes de travail sur l'enseignement du C++ au comité C++ ou les differentes conférences aux CppCon).

                    Il faudra des arguments un peu plus solides que "moi, ça va".

                    -
                    Edité par gbdivers 20 novembre 2018 à 10:18:57

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 novembre 2018 à 10:17:24

                      Salut,

                      Je ne sais pas si ta migration vers le C++ s'est bien passé, après avoir vu tes affirmations, mais si c'est le cas tes 30 ans d'expérience n'y sont sûrement pas pour rien, tu as dû déjà approcher les bonnes notions comme la programmation orienté objet en C comme implémentée par gtk+

                      Non ce n'est pas une erreur, le cours de M.Nebra n'est pas bon, notamment concernant l'orienté objet où les classes sont présentés comme des gestionnaires de données et non des fournisseurs de services. Il n'est question nulle part de la différentiation des sémantiques entité et valeur. Il est obsolète et encourage de mauvaises pratiques.

                      Ton lien sur le C++11 a l'air juste. Mais il est vieux et concerne le Cx1x, une ébauche du C++11, donc non exhaustive. Il expose les features sans donner les bonnes pratiques et les cas d'utilisation. Il n'évôque pas la move-semantique et le RAII (notamment sur les pointeurs avec les pointeurs intelligents) qui sont les plus gros boulversements dans la façon de programmer.

                      C++ Primer et C++ language n'ont pas les mêmes objectifs, et C++ Primer est un livre partant des bases, un débutant peut tout à fait l'aborder.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Dream on, Dream on, Dream until your dream comes true
                        20 novembre 2018 à 10:19:43

                        ChristopheDrieu1 a écrit:

                        (1) Contrairement à ce que tout le monde semble dire, je le trouve très bien pour commencer et découvrir la programmation orientée objet, par contre il ne servira pas de livre de référence, c'est juste un livre pour se lancer.

                        (2) Attention avec ce livre, il faut vraiment lire les chapitres complètement parce que l'auteur utilise de mauvais exemples avant d'indiquer comment bien faire (je me demande d’ailleurs si les personnes qui critique ce livre ne sont pas tombés que sur ces mauvais exemples).

                        (1) Pour l'OO en C++, je n'ai aucun problème avec le fait de dire que c'est parfaitement catastrophique. Les exemples choisis sont de très mauvais exemple d'usage de l'OO (c'est une très mauvaise idée de modéliser un RPG comme ça), et d'autre part il montre des pratiques associées aux types valeurs sur des entités, et ça c'est pareil c'est un non sens.

                        (2) Le mauvais exemple principal et de loin c'est de gérer manuellement la mémoire en C++, et à aucun moment d'un bout à l'autre du cours il ne montre comment correctement manipuler la mémoire.

                        romantik a écrit:

                        Il n'évoque pas la move-semantique et le RAII (notamment sur les pointeurs avec les pointeurs intelligents) qui sont les plus gros boulversements dans la façon de programmer.

                        Le RAII est bien plus vieux que C++11.

                        -
                        Edité par Ksass`Peuk 20 novembre 2018 à 10:20:43

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                          20 novembre 2018 à 11:55:50

                          Bonjour,

                          Je ne pensais pas faire réagir comme cela, mais tant mieux si cela peu faire advancer les choses. Par contre j'ai besoin de vos lumières sur quelques phrases que je ne comprend pas très bien:

                          "les classes sont présentées comme des gestionnaires de données et non des fournisseurs de services"

                          "Il n'est question nulle part de la différentiation des sémantiques entité et valeur"

                          "il montre des pratiques associées aux types valeurs sur des entités"

                          Merci.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 novembre 2018 à 12:25:08

                            ChristopheDrieu1 a écrit:

                            Je ne pensais pas faire réagir comme cela, mais tant mieux si cela peu faire advancer les choses. 

                            (Pas sur que ça fasse avancer beaucoup les choses en fait. C'est des discussions qu'on a déjà eu 1000 fois sur le forum et ailleurs. Et tu n'apportes pas d'argument, juste une opinion : "moi, ça va".)

                            ChristopheDrieu1 a écrit:

                            "les classes sont présentées comme des gestionnaires de données et non des fournisseurs de services"

                            Une classe vue comme un agrégat de données :

                            • "une voiture contient un moteur, un volant, des sièges, des roues, etc"

                            Une classe vue comme un ensemble de service :

                            • "une voiture peut avancer, reculer, tourner à droite, tourner à gauche, etc". Voire des services plus haut niveau : "une voiture permet d'aller d'un point A à un point B".

                            EDIT : pour bien comprendre le problème avec la première approche vs la seconde : essaies de définir la classe de base "Véhicule" puis les classes dérivée "Voiture", "Avion" et "Bateau" en utilisant l'approche "agrégat de données". Puis essaie avec l'approche "ensemble de services".

                            ChristopheDrieu1 a écrit:

                            "Il n'est question nulle part de la différentiation des sémantiques entité et valeur"

                            Ce sont 2 sémantiques de classe. Tu trouveras pas mal d'explication sur google, la reference est probablement "Elements of Programming" de Stepanov.

                            ChristopheDrieu1 a écrit:

                            "il montre des pratiques associées aux types valeurs sur des entités"

                            Le cours mélange ces 2 sémantiques et utilise ces concepts d'une sémantique dans l'autre sémantique.

                            -
                            Edité par gbdivers 20 novembre 2018 à 12:29:59

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Apprendre le C++

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown