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.
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> usingnamespace 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> usingnamespace 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.
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,
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.
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.
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. :/
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 .
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)
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.
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.
× 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.