Partage
  • Partager sur Facebook
  • Partager sur Twitter

Quand utiliser des pointeurs

    30 décembre 2016 à 0:00:16

    Chers amis, bonsoir à vous tous, et bonnes fêtes,

    je m'adresse à vous, afin d'avoir une réponse aussi précise que possible sur les cas d'utilisation des pointeurs. Ce point est abordé précisément dans le cours de Mathieu Nébra (Programmez dans le langage C++), dans la première grande partie intitulé "Théorie, Découverte de la programmation en C++", chapitre les pointeurs, sous-titre : "Quand utiliser des pointeurs".

    En particulier Mathieu donne 3 cas d'utilisation qui sont les suivants :

    • gérer soi-même le moment de la création et de la destruction des cases mémoire ;

    • partager une variable dans plusieurs morceaux du code ;

    • sélectionner une valeur parmi plusieurs options.

    Pour le premier cas, c'est compris.

    Par contre, pour les 2 suivants, je ne comprends pas pourquoi les pointeurs doivent être utilisés.

    Par exemple, dans le cas du partage de variable, comme dans warcraft avec la cible, je ne comprends pas en quoi le pointeur est incontournable, comme cela est prétendu. Par exemple, pourquoi ne pourrait-on pas se contenter d'un

    personnage cible;


    , au lieu d'un

    personnage *cible;


    Si la cible change, il suffit de changer son nom par une simple affectation ?

    par exemple

    cible = mec1;

    puis

    cible = mec2;

    ??

    Puis , dans le dernier cas de figure (celui avec un choix), je cherche à comprendre l'intérêt du pointeur :

    Selon moi, il me semblerait naturel d'écrire (sans les esperluettes, et les étoiles ), je ne vois pas en quoi l'utilisation des pointeurs est indispensable

    voilà comment j'aurais écrit le programe :

        string reponseUtilisateur(0); //Un pointeur qui pointera sur la réponse choisie
    
        switch(reponse)
    
        {
    
        case 'A':
    
            reponseUtilisateur = reponseA; //On déplace le pointeur sur la réponse choisie
    
            break;
    
        case 'B':
    
            reponseUtilisateur = reponseB;
    
            break;
    
        case 'C':
    
            reponseUtilisateur = reponseC;
    
            break;
    
        }
    
    
        //On peut alors utiliser le pointeur pour afficher la réponse choisie
    
        cout << "Vous avez choisi la reponse : " << reponseUtilisateur << endl;
    
    
    




    -
    Edité par pseudo-simple 30 décembre 2016 à 0:08:25

    • Partager sur Facebook
    • Partager sur Twitter
      30 décembre 2016 à 0:34:55

      Salut,

      Premier point, change de cours, celui d'OC, en plus d'être obsolète, apprend un sacré paquet d'âneries à ne pas faire.
      Prend le cours de gbdivers, qui même s'il est encore en cours de rédaction, t'apprendra les bonnes pratiques:
      http://guillaume.belz.free.fr/doku.php?id=programmez_avec_le_langage_c

      Pour répondra à ta question, de nos jours, les pointeurs nu (car c'est d'eux qu'il s'agit dans ce cours foireux) ne sont à utiliser qu'en cas de force majeur (garder un trace de l'élément parent dans un arbre par exemple).

      Coté partage de données, on privilégiera les références.
      Coté allocation mémoire, on privilégiera les pointeurs intelligents qui s'en chargerons à ta place.

      • Partager sur Facebook
      • Partager sur Twitter
        30 décembre 2016 à 8:28:52

        Environ jamais.

        Les seuls pointeurs que j'utilise personnellement, c'est quand je dois utiliser une bibliothèque C.

        • Partager sur Facebook
        • Partager sur Twitter

        git is great because Linus did it, mercurial is better because he didn't.

          30 décembre 2016 à 9:59:15

          Cher Deedolith

          je te remercie de m'avoir donné ton point vue sur le cours, point de vue que je ne partage pas, car ce cours a au contraire déjà répondu à des questions que je n'ai nullement trouvé hier. Un exemple, notre cher Mathieu Nébra, nous donne enfin une définition claire et sans équivoque de ce qu'est un pointeur. Pour moi, ce cours est totalement d'actualité, et je ne peux certainement pas me payer le luxe de le dénigrer comme tu l'as fait, en tant que personne en cours de progrès. C'est frôler l'indécence que de parler de "cours foireux"

          En ce qui concerne ma question, je pense qu'il y a une réponse plus claire qui doit exister. Et l'intolérance(ici elle se manifeste car le manque d'effort pour comprendre un cours d'excellente qualité) , qu'elle soir scientifique ou autre, n'apporte jamais rien de positif. A la place d'être intolérant, c'est mieux d'essayer de comprendre ce que l'autre a voulu dire (leçon de vie)

          Cher Markand, merci aussi pour ton avis

          Je souhaite vraiment une réponse plus étoffée à mes questions, car je pense que Mathieu sait de quoi il parle.

          Afin d'aider ceux qui passeront ici, je mets le lien concerné :

          https://openclassrooms.com/courses/programmez-avec-le-langage-c/les-pointeurs-1

          Maintenant , je fais un copier-coller des points précis que je veux comprendre en détails :

          Il y a en réalité trois cas d'application :

          • partager une variable dans plusieurs morceaux du code ;

          • sélectionner une valeur parmi plusieurs options

          2)  Partager une variable :

          Comment feriez-vous pour indiquer, en C++, la cible du personnage rouge ?
          Bien sûr, vous ne savez pas encore comment faire en détail mais vous avez peut-être une petite idée. Rappelez-vous le titre de ce chapitre.
          Oui oui, un pointeur est une bonne solution ! Chaque personnage possède un pointeur qui pointe vers sa cible. Il a ainsi un moyen de savoir qui viser et attaquer. On pourrait par exemple écrire quelque chose du type :

          Personnage *cible; //Un pointeur qui pointe sur un autre personnage

          Quel est le vrai avantage d'un pointeur comparé à une variable simple ?

          3) Sélectionner une valeur parmi plusieurs options

          Pourquoi un pointeur est-il utilisé dans l'exemple avec la "kénophobie"  ? Pourquoi est-ce vraiment utile ? En quoi gagne-t-on par rapport à une variable simple ?

          Une fois que le pointeur a été déplacé (dans le switch), on peut l'utiliser comme moyen d'accès à la réponse de l'utilisateur. On a ainsi un moyen d'atteindre directement cette variable sans devoir refaire le test à chaque fois qu'on en a besoin.
          C'est une variable qui contient une valeur que l'on ne pouvait pas connaître avant (puisqu'elle dépend de ce que l'utilisateur a entré).

          Merci à tous

          • Partager sur Facebook
          • Partager sur Twitter
            30 décembre 2016 à 10:17:11

            YES, man a écrit:

            Quel est le vrai avantage d'un pointeur comparé à une variable simple ?Merci à tous


            En tant que débutant, tu n'es pas vraiment en position d'évaluer le contenu d'un cours. Tu peux avoir l'impression que le contenu est bien présenté, que c'est bien rédigé, mais sur la validité du contenu, non.

            Un pointeur n'est pas une variable moins simple que les autres.  Pour ce qui est des pointeurs "ordinaires", c'est une donnée qui contient une adresse, point.

            Et il n'y a pas d'avantages intrinsèques dans le pointeur. On en utilise quand on en a besoin pour implémenter un certain modèle de données.

            exemple ici : on a une relation  entre Personnages : un Personnage peut avoir comme cible un autre Personnage.  Une des façons de faire est d'avoir, dans la description du personnage, quelque chose qui identifie sa cible eventuelle. Un identifiant.   Ca peut être un pointeur, mais si on a représenté l'ensemble des personnages comme un vector (par exemple), ça peut être son numéro dans ce vecteur. Ou si les personnages sont dans un dictionnaire associatif, ça peut être sa clé.

            Et puis pour bidouiller, souvent, il y a les références, aussi.

             --

            Et M. Nebra qui parait-il "sait de quoi il parle", oublie un cas extrêmement important d'utilisation des pointeurs en C++ : le polymorphisme.

            En effet, pour avoir une variable dont le contenu peut être une instance de différentes classes, il faut passer par un pointeur vers une classe parente commune.

            -
            Edité par michelbillaud 30 décembre 2016 à 10:24:38

            • Partager sur Facebook
            • Partager sur Twitter
              30 décembre 2016 à 10:20:23

              je te remercie de m'avoir donné ton point vue sur le cours, point de vue que je ne partage pas, car ce cours a au contraire déjà répondu à des questions que je n'ai nullement trouvé hier. Un exemple, notre cher Mathieu Nébra, nous donne enfin une définition claire et sans équivoque de ce qu'est un pointeur. Pour moi, ce cours est totalement d'actualité, et je ne peux certainement pas me payer le luxe de le dénigrer comme tu l'as fait, en tant que personne en cours de progrès. C'est frôler l'indécence que de parler de "cours foireux"

              C'est con parce que depuis il y a eu 3 version de C++ (11, 14 et 17). C'est aussi con parce qu'en C++ on utilise pas de pointeur bruts.

              Je souhaite vraiment une réponse plus étoffée à mes questions, car je pense que Mathieu sait de quoi il parle.

              Non justement il ne sait pas. C'est pas parce qu'une personne écrit un cours sur C++ qu'il est forcément bon. Le cours est rempli d'erreur en tout genre, de mauvaises conceptions et de mauvaises pratiques qui sont plus utilisées depuis des années.

              Pour info, j'ai une application d'environ 10000 lignes de code, il n'y aucun pointeur brut (excepté les liaisons avec les bibliothèques C).

              -
              Edité par markand 30 décembre 2016 à 10:21:20

              • Partager sur Facebook
              • Partager sur Twitter

              git is great because Linus did it, mercurial is better because he didn't.

                30 décembre 2016 à 10:40:06

                HS : petite appartée sur la qualité du cours (et j'espère que cette discussion ne va pas tourner encore autour de ce problème, donc autant régler les choses une bonne fois pour tout et que l'on passe a autre chose).

                @YES, man tu ne sais pas de quoi tu parles et tu n'as pas les compétences pour juger de la qualité de ce cours ou pour juger des compétences de Mathieu. Si tu es interessé de savoir pourquoi ce cours pose problème, tu trouveras plusieurs discussions sur le forum a ce sujet. Sinon, ne t'étonnes pas de ne pas comprendre.

                Fin du HS (j'espere).

                -----------------------------------------------------------------------

                Personnage   cible = mec1;   // I
                Personnage & cible = mec1;   // II
                Personnage * cible = &mec1;  // III

                Avec une valeur (I), l'objet est copiée. Si tu essaies de modifier "cible", "mec1" n'est pas modifié. Si tu ecris par exemple "cible->perdrePV(10)", "mec1" ne change pas ses PV.

                Avec une reference (II) ou un pointeur (III), cela cree un indirection sur "mec1". C'est comme si "cible" et "mec1" étaient deux noms pour le même objet. Si "cible" est modifié, alors "mec1" est modifié.

                Une référence brute & n'est pas modifiable (tu ne peux pas écrire "cible = mec2"). Pour avoir une référence modifiable, tu peux utiliser "std::reference_wrapper<Personnage> cible = mec1".

                Une différence entre un pointeur et une référence est que le pointeur peut être null. Il faut donc toujours tester un pointeur avant utilisation.

                Une autre différence est qu'une référence n'est jamais propriétaire d'un objet (ownership), c'est a dire qu'une référence ne détruit jamais un objet. Pour un pointeur, cela depend :

                - un pointeur nu, on ne sait pas s'il a l'ownership (donc c'est très dangereux d'utiliser les pointeurs nus)

                - un std::unique_ptr a l'ownership (il détruit automatiquement l'objet)

                - un shared_ptr partage l'ownership (l'objet est détruit quand tous les shared_ptr sur cet objet sont détruit)

                C'est un resume tres court et incomplet (std::weak_ptr), tu ne vas probablement pas tout comprendre (tu n'as pas vu les concepts d'indirection et d'ownership).

                YES, man a écrit:

                Selon moi, il me semblerait naturel d'écrire (sans les esperluettes, et les étoiles ), je ne vois pas en quoi l'utilisation des pointeurs est indispensable

                YES, man a écrit:

                Pourquoi un pointeur est-il utilisé dans l'exemple avec la "kénophobie"  ? Pourquoi est-ce vraiment utile ? En quoi gagne-t-on par rapport à une variable simple ?

                Oui, c'est un très mauvais exemple d'utilisation des pointeurs. C'est pour éviter la copie, mais c'est un mauvais exemple.

                • Partager sur Facebook
                • Partager sur Twitter
                  30 décembre 2016 à 11:07:55

                  Gbdivers. Si il y a des coquilles dans le cours, cela m'intéresserait de savoir quelles discussions du forum en parlent afin d'éviter de perdre du temps de compréhension, si il  y a vraiment des choses fausses

                  Peux-tu me donner des liens des  discussions du forum qui en parlent ?

                  Merci

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 décembre 2016 à 11:15:13

                    http://www.informaticienzero.com/c-avec-openclassrooms-ou-comment-perdre-son-temps/

                    Il donne pleins de liens vers les discussions sur le forum.

                    -
                    Edité par gbdivers 30 décembre 2016 à 11:15:49

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 décembre 2016 à 11:39:08

                      Le cours C++ officiel de ce site est comme un discours de politicien : il a la forme pour qu'on adhère sans avoir le fond. Il dit avoir répondu à tes questions ? Pourtant, tu poses des questions sur ce qu'il raconte. De plus, es-tu sûr que c'est la BONNE réponse ?

                      Quand utiliser un pointeur ? Quand on ne peut rien utiliser d'autre, à savoir :

                      • Une variable classique
                      • Une référence
                      • Un unique_ptr
                      • Un shared_ptr
                      • Un weak_ptr

                      Autrement dit tu n'en as besoin que pour t'interfacer avec des choses qui n'utilisent que les raw pointers, comme les bibliothèques C ou certaines bibliothèques C++ avec un passif extrême.

                      -
                      Edité par anolya 30 décembre 2016 à 11:39:36

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 décembre 2016 à 11:59:12

                        Personnellement, je remercie Mathieu Nébra très chaleureusement, car son cours m'a fait apprendre des tas de choses

                        Et grâce à lui, j'ai déjà réalisé des programmes C++ qui fonctionnent très bien.

                        Gratitude donc.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 décembre 2016 à 12:34:04

                          YES, man a écrit:

                          Et grâce à lui, j'ai déjà réalisé des programmes C++ qui fonctionnent très bien.

                          Tomber en marche parce que par chance les erreurs ne se déclenchent pas, ce n'est pas "fonctionner bien". Enfin bref, de toute façon tu as l'air résolu à suivre ton gourou sans réfléchir. Je vais pas chercher à te faire changer d'avis, d'autres ont déjà essayé. Par contre évidemment, ne t'étonne pas que tout le monde dise que ton code est pourri d'erreur chaque fois que tu postes sur le forum.

                          • Partager sur Facebook
                          • Partager sur Twitter

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

                            30 décembre 2016 à 13:42:19

                            Je dis juste que je ne suis pas du genre à "cracher dans la soupe", et je cherche à comprendre le cours.

                            Ce Monsieur a mis beaucoup d'amour et de temps, et c'est plutôt ingrat de ne voir que les boulettes, sans voir toute la partie positive, celle qui marche.

                            C'est l'histoire du verre à moitié vide et à moitié plein.

                             A la place de critiquer sans cesse, proposer un erratum à soumettre à Mathieu, serait une attitude bien plus positive au lieu de ne faire que critiquer.

                            Je n'ai quasiment vu aucun commentaire, qui dise du bien en préliminaire, avant de se lancer dans une critique acerbe. Beaucoup de gens sur les forums s'adonnent à ce genre de polémique stérile, et cette attitude est inintéressante pour moi.

                            Moi,k je dis MERCI Mathieu pour votre temps et l'amour que vous avez mis dans ce cours

                             Si par hasard, quelqu'un a des idées purement scientifiques, qui soient basées sur des arguments positifs (et pas sur le fait de nier le travail d'autrui), et pas sur une critique maladive pour la résolution de mon problème initial, je suis intéressé, car je pense qu'au-delà des possibles coquilles, il y a une partie de réalité dans la partie dédiée à "Quand utiliser les pointeurs"

                            -
                            Edité par pseudo-simple 30 décembre 2016 à 13:51:37

                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 décembre 2016 à 13:56:05

                              Personnellement, je remercie Mathieu Nébra très chaleureusement, car son cours m'a fait apprendre des tas de choses

                              C'est con, tu vas devoir en désapprendre au moins 50%

                              Ce Monsieur a mis beaucoup d'amour et de temps, et c'est plutôt ingrat de ne voir que les boulettes, sans voir toute la partie positive, celle qui marche.

                              Si je veux demain j'écris un cours sur ruby, un langage que je ne connais pas. Il sera tout aussi mauvais que le C++ de ce site.

                              -
                              Edité par markand 30 décembre 2016 à 13:57:54

                              • Partager sur Facebook
                              • Partager sur Twitter

                              git is great because Linus did it, mercurial is better because he didn't.

                                30 décembre 2016 à 14:10:50

                                YES, man a écrit:

                                sans voir toute la partie positive, celle qui marche.

                                Tu n'as pas pris le temps de lire les discussions. On est nombreux à reconnaître la qualité pédagogique des cours de Mathieu. Ce n'est pas pour rien que Le Site du Zéro a fonctionné aussi bien.

                                Mais des erreurs avec une bonne pédagogie restent des erreurs.

                                YES, man a écrit:

                                A la place de critiquer sans cesse, proposer un erratum à soumettre à Mathieu, serait une attitude bien plus positive au lieu de ne faire que critiquer.

                                Deja fait. Plusieurs fois. Sois directement aupres des auteurs (par exemple https://openclassrooms.com/forum/sujet/mise-a-jour-du-cours-c), soit aupres du Communauty Manager.

                                Mais après plusieurs années de propositions de corrections qui n'ont pas été prises en compte, il a bien fallu se résoudre à déconseiller ce cours.

                                Et dans l'état actuel, ce cours ne peut plus être mis à jour. Il est trop ancien et doit avoir une reecriture complete. Mathieu en a déjà parlé sur le forum, mais le temps et les compétences sont difficiles à réunir.

                                En attendant, que ca te plaise ou non, ce cours est déconseillé par la majorité des intervenants sur le forum.

                                YES, man a écrit:

                                Si par hasard, quelqu'un a des idées purement scientifiques, qui soient basées sur des arguments positifs (et pas sur le fait de nier le travail d'autrui), et pas sur une critique maladive pour la résolution de mon problème initial, je suis intéressé, car je pense qu'au-delà des possibles coquilles, il y a une partie de réalité dans la partie dédiée à "Quand utiliser les pointeurs"

                                (HS : "scientifiques" ne veut pas dire grand chose dans ce contexte)

                                On a repondu a tes questions je crois. Tu as tous les concepts clés : indirection, nullite, ownership, polymorphisme. Pour résumer ce qui a été dit :

                                • "gérer soi-même le moment de la création et de la destruction des cases mémoire" : c'est de l'allocation dynamique, qui n'est pas une spécificité des pointeurs nus. Il existe beaucoup de fonctionnalités spécialisée pour faire cela, et les pointeurs nus sont l'approche la moins sûre.
                                • "partager une variable dans plusieurs morceaux du code" : c'est le rôle des indirections et il en existe plusieurs types. Les pointeurs nus sont (encore une fois) le type d'indirection la moins sûre.
                                • "sélectionner une valeur parmi plusieurs options" : très mauvais exemple d'utilisation des pointeurs. A oublier.

                                Bref, si tu veux parler de la qualité du cours (et le défendre de façon aveugle et fanatique), tu vas avoir beaucoup de reponses negatives. Alors je te conseille de te focaliser sur les questions techniques sur le C++, cela evitera a tout le monde de perdre du temps.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 décembre 2016 à 14:30:35

                                  Salut monsieur yesman...

                                  Je parie une mousse que le total d'années d'expérience en C++ des gens qui ont posté sur ce topic doit être à la louche vachement plus que ton âge, au minimum XDDDD

                                  Perso, j'ai pas lu le cours en question, mais si les sus-nommés disent qu'il est obsolète, je leur fais confiance.

                                  L'utilisation de pointeurs nus en C++ illustre fort bien le théorème de Murphy-Deniau : "Au début les emmerdes s'additionnent, ensuite elles se multiplient."

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 décembre 2016 à 14:39:08

                                    Lord Casque Noir a écrit:

                                    Je parie une mousse que le total d'années d'expérience en C++ des gens qui ont posté sur ce topic doit être à la louche vachement plus que ton âge, au minimum XDDDD

                                    Même pas sur qu'il soit nécessaire d'additionner. Je pari que certains ont plus d'années d'expérience que son âge. :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      30 décembre 2016 à 17:26:48

                                      voilà , à la place de me faire insulter de fanatique par gbdivers, qui se défend, lui de façon fanatique,  et lordcasque (irrespectueux au possible), car empêtrés dans la moquerie, vous voici donc passés aux moqueries.

                                      L'Histoire a , à maintes fois prouvé, que la majorité n'a pas forcément raison.

                                      Je n'interviens donc plus sur cette discussion, et ne lirai plus les posts, pour ne pas tomber dans la provocation.

                                      Vous pouvez continuer à me dénigrer entre vous, et à insulter le cours de Mathieu , puisque c'est votre mentalité.

                                      Salut

                                       ps : gbdivers, lordcasque et autres révolutionnaires 2.0 , restez à votre place

                                      -
                                      Edité par pseudo-simple 30 décembre 2016 à 17:36:46

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        30 décembre 2016 à 17:46:37

                                        Deedolith a écrit:

                                        Salut,

                                        Premier point, change de cours, celui d'OC, en plus d'être obsolète, apprend un sacré paquet d'âneries à ne pas faire.
                                        Prend le cours de gbdivers, qui même s'il est encore en cours de rédaction, t'apprendra les bonnes pratiques:
                                        http://guillaume.belz.free.fr/doku.php?id=programmez_avec_le_langage_c

                                        Pour répondra à ta question, de nos jours, les pointeurs nu (car c'est d'eux qu'il s'agit dans ce cours foireux) ne sont à utiliser qu'en cas de force majeur (garder un trace de l'élément parent dans un arbre par exemple).

                                        Coté partage de données, on privilégiera les références.
                                        Coté allocation mémoire, on privilégiera les pointeurs intelligents qui s'en chargerons à ta place.

                                        Merci pour vos différents retours. Pour information nous sommes à la recherche de professeurs pour actualiser ce cours qui est effectivement quelque peu obsolète. Merci pour votre patience et votre compréhension. 

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          30 décembre 2016 à 17:53:00

                                          @YES, man

                                          Toi aussi, restes a ta place. Tu es un débutant qui vient de commencer le C++ il y a quelques heures, tu as lu 11 chapitres d'un cours d'introduction obsolète, tu n'as pas d'autres arguments pour défendre de ce cours que "moi, je l'aime bien". Tu as le droit de remettre en cause ce que l'on affirme, mais il faudrait un peu plus d'arguments.

                                          Et "fanatique" : "Qui a pour quelque chose, quelqu'un, une admiration passionnée, enthousiaste" (Larousse). La definition s'applique a toi.

                                          Un point que tu n'as pas compris : critiquer quelque chose n'est pas l'insulter. Critiquer est une etape necessaire et indispensable pour corriger et progresser. Mathieu a lui même reconnu que le cours était obsolète et devait être mis à jour. Mathieu est intelligent et n'est pas devenu chef d'entreprise pour rien. Il sait très bien qu'il n'a pas les compétences pour écrire une grande majorité des cours ici. Et c'est pour cela qu'il met en place des partenariats avec des organismes de formation pour la création de cours.

                                          Le plus drôle est que si Mathieu intervenait dans cette discussion, il serait probablement pas de ton avis. Et il serait probablement d'accord avec moi sur le fait que tu ferais mieux de te focaliser sur les questions techniques plutôt que de te perdre dans des discussions stériles sur la qualité du cours.

                                          (HS : et ce fichu argument éculé "la majorité n'a pas forcément raison". L'histoire a montré aussi que la minorité n'a pas forcément raison. Mais l'expérience montre que ceux qui utilisent cet argument le font quand ils ne savent plus argumenter).

                                          EDIT :

                                          @MarionBibifoc

                                          Salut et bienvenue ici ;)

                                          Pour info (je ne sais pas si les infos sont transmises entre Community Manager), j'avais déjà discuté de ce problème avec Anouck par MP. Je n'ai personnellement pas le temps, et je lui avait conseillé de contacter d'autres intervenants du forum (lmghs, bacelar, Ksass`Peuk, michelbillaud, koala01, etc), mais ils n'ont (probablement pas non plus le temps).

                                          En tout état de cause, si le cours trouve un repreneur, il ne faut pas hésiter à demander des relectures sur le forum, il y a toujours pleins de bonnes volontés pour aider.

                                          -
                                          Edité par gbdivers 30 décembre 2016 à 17:59:24

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            30 décembre 2016 à 18:21:10

                                            @YES, man:

                                            Oui, le cours de Mathieu Nebra est malheureusement obsolète et foireux.
                                            Un exemple tout simple, Chapitre 4, partie 4:

                                            #include <algorithm>
                                            #include <vector>
                                            using namespace std;
                                            
                                            //Définition de Remplir…
                                            
                                            int main()
                                            { 
                                                vector<int> tab(100,0); //Un tableau de 100 cases valant toutes 0
                                            
                                                Remplir f(0);       
                                            
                                                generate(tab.begin(), tab.end(), f);
                                                //On applique f à tout ce qui se trouve entre begin() et end()
                                                
                                                return 0;
                                            }


                                            Alors que l'on est vers la fin du cours, il y a toujours l'instruction using namespace std; qui traine alors qu'elle n'a rien a faire la !!
                                            Cette instruction a été mise en place dans un seul but: Assurer la compatibilité avec les anciens programmes.
                                            De nos jours, sur un programme qui part de zero, elle n'a aucune raison d'être et a plus d'effets pervers qu'autre chose.
                                            En effet, cette instruction importe tous les noms de la bibliothèque standard dans ton programme, ce qui peut générer des conflits que le compilateur te fera une joie de décrier en te laissant perplexe.
                                            Pire encore si tu utilise plusieurs bibliothèque, car tu n'aura aucun pouvoir d'intervenir sur les sources des bibliothèques en question.

                                            S'il te faut un autre exemple, la presence de cette directive m'interdit d'ecrire une structure comme ceci:

                                            struct vector
                                            {
                                                int x;
                                                int y;
                                                float length;
                                                float angle;
                                            };

                                            Alors que son absence ne posera aucun problème.

                                            Sur la forme, le cours d'OC est très bien, sur le fond, c'est la cata.

                                            -
                                            Edité par Deedolith 30 décembre 2016 à 18:23:56

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              30 décembre 2016 à 18:27:13

                                              MarionBibifoc a écrit:

                                              Pour information nous sommes à la recherche de professeurs pour actualiser ce cours qui est effectivement quelque peu obsolète. Merci pour votre patience et votre compréhension.

                                              T'inquiètes pas, on comprend très bien, c'est un boulot de malade de refaire un cours from scratch. Mais du coup, on ne peut pas décemment conseiller de continuer à suivre ce cours. Après, le jour où le cours aura été repris, j'aurai pas de problème à le conseiller s'il est correct. Après des gens qui ont le temps, les compétences et l'envie pour produire un cours de C++ correct, ça va être dur d'en trouver.

                                              • Partager sur Facebook
                                              • Partager sur Twitter

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

                                                30 décembre 2016 à 18:38:04

                                                Pourquoi ne pas repartir du cours de gbdivers ?

                                                Bon, en plus, le Mathieu Nebra ne doit pas avoir vraiment le temps de s'occuper d"un cours en particulier... avec une boîte à faire tourner...

                                                YES, man a écrit:

                                                Je n'interviens donc plus sur cette discussion, et ne lirai plus les posts, pour ne pas tomber dans la provocation.

                                                -
                                                Edité par Lord Casque Noir 30 décembre 2016 à 18:39:09

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  30 décembre 2016 à 18:44:29

                                                  Lord Casque Noir a écrit:

                                                  Pourquoi ne pas repartir du cours de gbdivers ?

                                                  A voir. @gbdivers a plusieurs fois fait remarquer que son cours était probablement ardu à enquiller pour un débutant sans s'en dégoûter. Parfois avec un peu d'extrémisme concernant les apprenants qui s'y attaquent (qui, dans leur vaste majorité, viseraient juste à apprendre C++ en deux semaines avant de passer au langage suivant :p ). Je ne serai pas aussi catégorique. Mais, il est probable que ce soit effectivement assez raide et peut être insuffisamment pris par la main (encore une fois : pour un public plus amateur).

                                                  Après, il faudrait se pencher vraiment dessus, pour savoir s'il est possible d'adapter avec une approche plus légère, ou si la modification du plan et de l'ordre d'apprentissage des notions nécessiterait tellement de changement que réécrire serait aussi rapide.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

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

                                                    30 décembre 2016 à 18:48:05

                                                    Ksass`Peuk a écrit:

                                                    @gbdivers a plusieurs fois fait remarquer que son cours était probablement ardu à enquiller pour un débutant sans s'en dégoûter. 

                                                    Après, faudrait se poser la question de savoir si C++ est vraiment un langage pour débutant non-initiés... Perso j'aurais tendance à dire que non...

                                                    En effet il faut considérer les applications du langage : les problématiques où le C++ est la bonne solution, c'est pas vraiment un "plus ou moins" ou autre script basique... 

                                                    -
                                                    Edité par Lord Casque Noir 30 décembre 2016 à 18:50:18

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      30 décembre 2016 à 19:07:37

                                                      C'est pas un probleme debutant non-initiés, mais un problème d'investissement que l'apprenant est prêt à mettre dans l'apprentissage du C++.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        31 décembre 2016 à 11:46:00

                                                        gbdivers a écrit:

                                                        C'est pas un probleme debutant non-initiés, mais un problème d'investissement que l'apprenant est prêt à mettre dans l'apprentissage du C++.


                                                        Par exemple il pourrait investir dans l'apprentissage des bases de la programmation, puis, se lancer dans C++.

                                                        -
                                                        Edité par michelbillaud 31 décembre 2016 à 11:46:27

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          31 décembre 2016 à 12:26:11

                                                          Personnellement, j'ai commencé par apprendre le C puis le C++ en achetant les bouquins d'OC. J'aurai voulu volontairement me mettre plus de bâtons dans les roues  pour apprendre ces deux langages, j'aurai pas pu (contre productif d'apprendre C avant C++, puis cours C++ d'OC je veux dire). Mais en venant régulièrement sur le forum (pas forcement pour poster) j'ai désappris mes mauvaises habitudes (j'ai acheté plus tard le livre de Philippe Dunski, ça m'a bien aidé) et je suis plutôt satisfait de mon niveau à l'heure actuelle. En ce moment je reprends de l'ancien code et je constate quelques petites erreurs, comme des std::string passé par copie/valeur en paramètre de fonction au lieu de références constantes. Si j'avais eu les bonnes pratiques dès le départ, j'aurais eu en moins toutes ces erreurs à corriger. Apparemment YES,man a l'air complètement obtus ou il ne se rend pas compte qu'il se met des freins à son apprentissage.:-°

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                                                            31 décembre 2016 à 13:27:11

                                                            Salut,

                                                            @Yes, man : Il ne faudrait pas faire l'erreur de croire que, parce que le site s'appelait autrefois "le site du zero" que tous les intervenants sont forcément des "zéros" en informatique.

                                                            Certains des intervenants sont des professionnels actifs du développement en général, du développement C++ en particulier, et utilisent ce langage pour certains depuis plus de dix ans.

                                                            Moi même, j'engrange plus de douze ans d'expérience dans ce langage et (oui, j'en suis fier) j'ai écrit un livre sur la qualité du développement en C++ qui... a été cité par l'Institut Nationnale Spaciale francaise parmis les sources à prendre en compte lors de la définition de leurs normes de qualité pour C, C++ et l'embarqué ( et je doute que le livre de nebra, tiré du cours que tu supporte si frénétiquement n'ait jamais été cité comme référence ;) )

                                                            Tu peux donc te dire que, si ces professionnels (gbdivers, ksass ´ Peuk, michelbillaud (je crois) -- dont je ne partage pourtant pas tous les avis, très loin de là -- et moi-même pour n'en citer que quelques un (au risque d'en oublier) ) te disent que ce cours est dangereux, car très didactique et trop bien écrit, mais bourré d'erreurs, tu peux leur accorder un certain crédit, au lieu de croire qu'ils se contentent de "cracher dans la soupe" sans savoir de quoi ils parlent.

                                                            Mais, comme tu as l'air de rester bloqué sur le fait que "le cours est si bon", je ne vois plus qu'une seule solution pour essayer de t'en convaincre : faisons un petit jeu.

                                                            En ne te basant que sur le contenu du cours, pourrais tu répondre à ces quelques questions :

                                                            1. Que se passe-t-il si new échoue?
                                                            2. Si new échoue, que va-t-il advenir des ressources précédemment allouées à l'aide de new ?
                                                            3. Quel est le gros problème de la classe "Personnage" dont il présente le code dans la partie OO?
                                                            4. Quelle est la particularité du "constructeur par défaut", du "constructeur de copie", de l'"opérateur d'affectation" et du "destructeur?
                                                            5. Quelle différence devrait-on remarquer entre une classe "Point" et une classe "Personnage"?
                                                            6. Qu'est ce que la "sémantique de valeur" ?
                                                            7. Qu'est ce que la "sémantique d'entité" ?

                                                            Avec un bon cours de C++, tu devrais être en mesure de répondre à toutes ces questions au plus tardeux chapitre après avoir rencontré pour la première fois le mot clé new .

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                                              31 décembre 2016 à 14:20:26

                                                              Puisque l'OP est parti faire du coloriage dans son safe-space, je vais me faire l'avocat du diable ;)

                                                              > Que se passe-t-il si new échoue?

                                                              C'est un débat.

                                                              Je dirais hypocritement qu'un new sur une petite classe de 16 octets n'échoue jamais sur un PC (en effet, si t'as plus une seule page de RAM dispo, ça veut dire que ça swap à mort depuis des lustres, le PC est à la rue, et l'utilisateur ou un quelconque programme de monitoring aura rebooté le machin bien avant que tu aies une exception sur un tout petit new). Donc le fait que le programme crashe sur une exception est... disons, anecdotique, vu que le PC est déjà mort.

                                                              Par contre,

                                                              - sur une grosse allocation, dont la taille dépend de paramètres utilisateur qui peuvent éventuellement excéder la RAM dispo...

                                                              - ou en embarqué,

                                                              - ou si on a d'autres contraintes (criticité, etc)

                                                              alors c'est différent... 

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Quand utiliser des pointeurs

                                                              × 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