Partage
  • Partager sur Facebook
  • Partager sur Twitter

FAQ C++

Ebauche

    12 juillet 2007 à 17:51:44

    Hello tout le monde,

    Au vu des question récurrentes qui viennent sur le forum et aussi à cause du (trop) grand nombre de personnes qui ignorent complètement l'utilisation des flots,string,vector etc. J'ai eu l'idée suivante:

    Je propose la création d'une FAQ C++, du même type que celle se trouvant sur le forum C. Dans un premier temps, je propose de regrouper des questions/réponses afin de plus tard regrouper de manière plus définitive les questions les plus utiles/pertinentes/sensées. Le but serait d'expliquer ce qu'il ne faut pas faire, pourquoi il ne faut pas le faire et par quoi le remplacer (si possible évidemment).

    Le but serait d'avoir une liste de questions générales sur le C++ et pas de reprendre les questions du forum C à la sauce C++ ou des questions sur de bibliothèques tierces (Qt,GTK,SDL,Irrlicht,...)


    Si vous avez une question ainsi que sa réponse postez-la simplement à la suite de ce post. De même si vous avez une remarque sur la FAQ en général ou sur une question/réponse qui a été proposée.

    Pour améliorer la lisibilité de ce thread, désactivez votre signature, merci.

    Nanoc

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


    Bon je me lance avec ce qui me vient à l'idée sur le moment.

    [1] Pourquoi ne pas utiliser les printf() ?

    Parce qu'ils ont été remplacé en C++ par les flots de sortie, plus pratique et plus simple à utiliser. Pour les utiliser il faut inclure la bibliothèque <iostream>. Le flot de sortie est std::cout.

    #include <iostream>
    using namespace std;
    //---
    cout << "Bonjour !" << endl;     //Affiche "Bonjour !" et fait un retour à la ligne
    int a = 2;
    cout << "La valeur de a est: " << a << endl; //Affiche "La valeur de a est: 2" et fait un retour à la ligne
    //---
     


    On peut aussi placer directement un appel de fonction dans un flux. La valeur que renvoie la fonction sera alors affichée comme si c'était un variable.

    [2] Pourquoi ne pas utiliser les char* ?

    Parce qu'ils ont été remplacés par une classe complète pour les chaîne de caractères; la classe string. De plus beaucoup de fonctions très pratique ont été implémentées pour simplifier la vie du programmeur.

    #include <string>
    using namespace std;
    //---
    string maChaine = "Bonjour";    //Déclaration d'une chaîne contenant le texte "Bonjour"
    maChaine = maChaine + " les zéros";       //Ajout de " les zéros a la fin de maChaine.
    char lettre = maChaine[0];      //Met la lettre 'B' dans la variable lettre
    int longueur = maChaine.size(); //Met la longueur de la chaîne de caractères dans longueur
    //---
     

    Il existe beaucoup d'autres fonction associées aux chaînes de caractères. Une liste est disponible ici (en anglais).

    [3] Quelle est la différence entre un constructeur par défaut et un constructeur avec des valeurs par défaut ?

    Autrement dit, quelle est la différence entre:
    MaClasse()

    et
    MaClasse(int i=0, double j=3.14)


    Les 2 sont des constructeurs par défaut puisqu'ils permettent tous les 2 de créer une instance de MaClasse si on ne spécifie pas d'argument.
    Cependant, le 2ème constructeur permet de créer 3 types d'objet, chose qui n'est pas forcément voulue.
    On peut construire les objet suivants:
    MaClasse objet1;    //Constructeur par defaut
    MaClasse objet2(3,-5.18)//constructeur prenant 2 arguments
    MaClasse objet3(3); //Constructeur ne prenant qu'un argument
    //Objet3 est equivalent a l'appel suivant:
    MaClasse objet4(3,3.14);


    Si on met des valeurs par défaut, il faut bien penser que l'utilisateur de la classe peut appeler le constructeur avec 0,1 ou 2 arguments. Il n'est pas forcément pertinent de pouvoir appeler le constructeur avec 1 seul argument. Si on veut que l'utilisateur puisse utiliser ces 3 possibilités, alors ce constructeur est pertinent, sinon on fera 2 constructeurs séparés, 1 par défaut et 1 prenant 2 valeurs.

    [4] Pourquoi ne pas utiliser exit(0) pour arrêter un programme ?

    Parce que exit(0) arrête le programme de manière très brutale. Un peu comme si on "plantait" le programme. Aucun destructeur n'est appelé, la mémoire n'est pas désallouée,etc...

    Si vous voulez arrêter votre programme faites-le autrement. Le exit(0) est réservé aux cas où il y a un plus grand risque à faire continuer le programme qu'à l'arrêter brutalement. Par exemple si la suite de programme risque de détruire des données vitales pour votre ordinateur.


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


    A vous, je suis en panne d'inspiration
    • Partager sur Facebook
    • Partager sur Twitter
    Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
      12 juillet 2007 à 17:57:49

      Salut.

      Je me permet de jouer mon chieur 2 secondes. :-°

      Tu devrais faire une question par message, sinon il va être impossible de s'y retrouver.
      Avec une liste récapitulative dans le premier post ce serait parfait.

      Sinon je vois pas bien ce que signifie la question 3, ou tu veux en venir...

      Citation : Pas de titre

      Cependant, le 2ème constructeur permet de créer 3 types d'objet,


      o_O
      • Partager sur Facebook
      • Partager sur Twitter
        12 juillet 2007 à 17:58:47

        les messages autorisés ici :
        - mettre une question destinée à la FAQ (avec ou sans sa réponse).
        - rectifier une question ou une réponse.

        Si vous avez une question du comment d'une réponse, posez la plutôt en MP au posteur du message concerné.

        çà permettra d'y voir plus clair.
        merci.

        Kevin > c'est une collecte d'info et non une FAQ en elle même.
        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2007 à 18:15:21

          Ah ok j'avais mal lu. ^^
          Mais maintenant que j'ai bien lu, je me demande pourquoi ne pas faire directement une FAQ.
          Ca éviterais d'avoir à tout ressaisir.

          Sinon j'ai une question sous le coude là :

          [][] Comment séparer la déclaration d'une fonction template et sa définition ?

          De manière purement standard, il faut utiliser le mot clef export.
          Mauvaise nouvelle, le mot clef export fut ajouté à la norme en 1996 et à l'heure actuelle quasi-aucun compilateur ne le supporte...

          Donc la "véritable" réponse à cette question est : non.
          On ne peut pas séparer le prototype d'une fonction contenant un template de sa définition.
          • Partager sur Facebook
          • Partager sur Twitter
            12 juillet 2007 à 23:05:10

            Hum ... :-/

            [1] http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.1
            [2] http://c.developpez.com/faq/cpp/?page=strings#STRINGS_avantages
            [3] http://c.developpez.com/faq/cpp/?page=constructeur#CLASS_constructeur_defaut
            [4] Ce n'est pas tout à fait exact. Il n'y a qu'une catégorie de variables qui n'est pas libérée, plus évidemment les données allouées et non placées dans des structures RAII vivant au bon endroit. Evidemment, je ne me souviens jamais de la catégorie qui reste. Il faudrait que je ressorte l'ARM ou la norme.

            Il est quand même vrai dans l'absolu que si des ressources qui doivent impérativement être restituées (genre un pot de peinture qui doit être remis sur son étagère) sont gérées dans des données qui ne seront pas détruites, alors ces pots resteront en vrac.
            Il n'y a guère que la mémoire à me pas être mise en péril avec des exit vu que les OS modernes la collecteront systématiquement à la fin du processus.

            [5][La Q/R de Kévin]
            De nouveau: http://c.developpez.com/faq/cpp/?page=templates#DIVERS_templates
            De plus, Jean Marc (fclc++/developpez/...) a écrit un article sur le sujet.
            De plus (bis): la norme date de 98.
            De plus (ter): on peut tout à fait séparer déclaration et définition. Mais la définition devra être inclue (!=liée) partout où l'on fera appel à la déclaration.
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
              13 juillet 2007 à 11:23:16

              Citation : lmghs

              De plus (bis): la norme date de 98.


              On m'aurais mentis !? (Comme dirais richard virenque)
              http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=52&rl=1

              Sinon c'est vrai que le sujet a été largement abordé, je ne m'était rendu compte que c'était à ce point là.
              Ca va être dur de trouver des questions originales. :/
              • Partager sur Facebook
              • Partager sur Twitter
                13 juillet 2007 à 22:13:04

                L'idée de la mise en place d'une FAQ est, en soit, une bonne idée ;) . Cependant, le fait est qu'il est completement inutile de réinventer la roue en démarrant celle-ci de zéro :-° .
                On pourrait par exemple réutiliser le contenu de la FAQ C++ des forums de Developpez.com qui est incontestablement de bonne qualité (question nombreuses et pertinantes et réponses impeccables).

                A nous de faire les démarches aupres d'eux pour obtenir l'autorisation, ce qui a priori ne devrais pas poser trop de problème attendu qu'elle doit etre sous licence GNU FDL ;) .

                • Partager sur Facebook
                • Partager sur Twitter
                  13 juillet 2007 à 23:15:59

                  Citation : Kerwando

                  Cependant, le fait est qu'il est completement inutile de réinventer la roue en démarrant celle-ci de zéro :-° .


                  +1. Sus au syndrôme NIH!

                  Citation : Kerwando

                  On pourrait par exemple réutiliser le contenu de la FAQ C++ des forums de Developpez.com qui est incontestablement de bonne qualité (question nombreuses et pertinantes et réponses impeccables).

                  A nous de faire les démarches aupres d'eux pour obtenir l'autorisation, ce qui a priori ne devrais pas poser trop de problème attendu qu'elle doit etre sous licence GNU FDL ;) .


                  La mirrorer ?

                  Sinon, il y a déjà beaucoup de choses dedans (on dépasse ce que veut initialement dire "FAQ" : les réponses aux questions fréquemment posées) [*], et il est toujours possible d'y proposer d'autres sujets. C'est Aurélien et Laurent qui s'occupent de la maintenance de la FAQ.

                  [*] Et pourtant, il y a quantité d'autres choses à dire (cf les autres FAQ dans ma signature)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                    14 juillet 2007 à 12:31:40

                    La mirrorer ne serait pas vraiment une bonne idée. Il faut qu'on puisse garder une certaine indépendance par rapport à eux tout de même.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 juillet 2007 à 12:46:12

                      Oui vous avez raison. Ca ne sert à rien de refaire la même chose que ce qui existe déjà.

                      Mais d'un autre coté, la FAQ de developpez est quand même d'un niveau plus élevé que la plus part des questions posées sur le forum.
                      La plus part des questions posées sur le forum concernent quand même le passage C-> C++, les flux et la base des classes.
                      Ce qui n'est en réalité qu'une toute petite partie de la FAQ de developpez.

                      Selon moi une bonne partie de cette FAQ est d'un niveau trop élevé (surtout au vu de l'avancement actuel du tuto de Matteo) pour ce forum.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                        14 juillet 2007 à 12:56:33

                        Et bien à nous de rajouter les questions que l'on jugera utiles. C'est justement tout l'intérêt du projet.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 juillet 2007 à 13:09:25

                          Exactement ce que je pensais.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                            14 juillet 2007 à 14:27:42

                            Vous savez, beaucoup des questions sur developpez viennent des problèmes récurrents qui avaient été (et continuent d'être) soulevées par des newbs'.

                            Plus les gens mal initiés et venant du C et que l'on a dû rediriger vers le RAII, etc, etc.

                            Des questions méthodologiques sont également addressées: Aurélien avait par exemple rajouté des entrées sur comment commencer le C++, chose que l'on retrouve aussi dans la FAQ non technique de Stroustrup.

                            Trouver des questions originales ne va pas être facile.

                            Et puis qu'est-ce que cela veut dire que "le niveau est plus élevé" ? Le niveau y fut bien plus faible dans le passé, maintenant il s'est amélioré. Il faut s'attendre à la même chose ici. Et à ce moment là, la FAQ pour newbs' risque de ne plus correspondre au niveau des forums ...

                            Autant faire FAQ commune et proposer à rajouter les questions qui feraient défaut.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                            FAQ 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