IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Livres C++ Discussion :

Quel livre pour se perfectionner en c++ ?


Sujet :

Livres C++

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Points : 206
    Points
    206
    Par défaut Quel livre pour se perfectionner en c++ ?
    Bonjour à tous, je souhaiterais me perfectionner en c++ et j'aimerais savoir quel(s) livre(s) me seraient les plus adaptés. Voici brièvement quelques informations :

    -Je ne fais de la programmation qu'en tant qu'amateur.

    J'ai fait que deux languages :

    -1 année de C.
    J'ai fini par créer un jeu en 2D et, voyant la difficulté que j'ai eu à créer la GUI, malgré l'apprentissage de GTK, j'ai décidé de me lancer dans un projet de GUI.
    Une grosse galère en C, et je me suis lancé au c++.
    -Presque une année de C++ maintenant, et je pense avoir acquis les bases :
    -Notion d'objet.
    -Héritage.
    -Polymorphisme.
    -Surcharges.
    -templates.
    -...
    J'ai récemment finis un projet en c++. Si cela peut vous aider à évaluer mes lacunes. Le voici.
    Je pense ne jamais pouvoir revenir au C...
    Je trouve que le véritable avantage du C++ par rapport au C, est les templates et les surcharges. Le coté POO ne me parait pas forcément nécessaire.

    J'ai tous appris globalement avec les cours et tutoriels C+ et la FAQ C++ développez.com et recherches google. Je n'ai jamais lu de livre C++.

    Cependant, j'ai l'impression d'être passé à coté de notions essentielles. C'est pourquoi, je pense qu'un/des livre(s) s'imposent.

    Voici les aspects que je souhaiterais améliorer :

    La POO :

    -Faut-il toujours utiliser la notion d'objet ? Dans quels cas oui, dans quels cas non ? Est-il normal qu'il que je me retrouve souvent avec des fonctions externe à tout objet ? Est-ce une habitude du C ?
    -Quand faut-il définir des fonctions membres (méthodes) et quand faut-il définir des fonctions en dehors de tout objet ? Exemple :
    struct Ligne
    {
    float a,b,c;//Equation du type ax+by=c.
    };

    Faut-il définir la fonction Point*(le pointeur est là pour renvoyer null en cas de colinéarité) GetIntersection(const Ligne& un, const Ligne& deux);
    Ou plutôt :
    Point*Ligne::GetIntersection(const Ligne& autre) const;
    -Quand le polymorphisme se justifie t-il ? Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Node
    {
    Node*first;
    Node*second;
    Operateur op;
    float GetValue()const;
    };
    J'ai pensé à cette structure quand j'ai voulu faire quelque chose comme :
    (a+(b*c))
    Mais bien sur, une telle structure ne marche pas :
    Ou stocke t-on la valeur de a,b et c ?
    Que se passe t-il si a,b,c sont des variables ?
    Faut-il faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct Number : public Node
    {
    float val;
    };
     
    et un 
    struct variable : public Node
    {
    std::string v_name;
    std::function<float(std::string)> GetValueFromVariable;
    };
    Et déclarer GetValue virtuelle ? Ou, y a t-il une solution plus propre ?


    Bien sur, ceci ne sont que des exemples, mais ils illustrent certains problèmes que je me pose en POO.


    Généricité

    J'ai l'impression avoir acquis une certaine expérience en templates et généricité en générale. Cependant, si il y a une livre qui traite de :
    -Allocateur de la STL.
    -Création de son propre container avec itérateurs et allocateurs.

    Algorithmie

    -Dans beaucoup de problèmes, je rencontrent des graphes. Je n'ai AUCUNE connaissance mathématique ou théorique des graphes. S'il existe un livre qui traite des structures à utiliser pour stocker l'information, pour exécuter des algorithmes classiques (Djiskra par exemple), ... tout cela en c++ avec un vocabulaire de débutant, ce serait parfait.

    Je me rend bien compte que avoir UN livre traitant de tous ces problèmes est irréaliste, cependant, si vous pouviez me proposer une liste de livre, ce serait parfait. Je vais ajouter que je créé avant tout des bibliothèques et non une application finie. Peut-être un livre sur les design patterns s'impose-t-il mais j'ai trouver les tutoriels sur développez très compréhensible et il me semble qu'ils suffisent. Y a t-il déjà un bon livre sur c++1x (google répond plutôt rarement à mes questions quand j'ai un problème spécifique avec c++1x) ?

    Merci à tous ceux qui ont lus ce long message, les questions que je pose dans la partie POO ne sont que des exemples de problèmes que j'ai en POO.

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Points : 206
    Points
    206
    Par défaut
    Non, j'avais lu la section livres. Cependant, d'après les commentaires, je n'arrive pas a situer mon niveau concernant les more effective et les exceptional : j'ai l'impression qu'une fois la conception (décider des méthodes/classes/algorithme), je ne rencontre pas de problèmes majeurs. Cependant, connaître la conception en C++ me paraît essentiel ainsi que certaines parties cachées (allocateurs).

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par NoIdea Voir le message
    Je pense ne jamais pouvoir revenir au C...
    Dommage, le C c'est formidable dans son genre. (tm).

    La POO :

    -Faut-il toujours utiliser la notion d'objet ? Dans quels cas oui, dans quels cas non ?
    <snip>
    Non, POO is not the silver bullet. (et accessoirement une telle chose n'existe pas :p).
    L'OO c'est bien, mais ça a ses limites et défauts (et y'en a pas mal).
    Bref, t'utilises un langage multiparadigme, profites-en.

    Généricité

    J'ai l'impression avoir acquis une certaine expérience en templates et généricité en générale. Cependant, si il y a une livre qui traite de :
    -Allocateur de la STL.
    -Création de son propre container avec itérateurs et allocateurs.
    La généricité c'est quand même un peu plus que ça. (MP, ET etc).
    Les allocateurs sérieux c'est pas compliqué pas besoin d'un bouquin pour ça.

    Mais bon, au vu de tes interventions sur le forum, je pense qu'un bouquin de type Modern C++ design t'apporterait beaucoup (même si y'a des choses que tu maitrises déjà dedans).

    Sinon orienté généricité y'a le Josuttis, C++ template the complete guide (un nom dans le genre).
    Et plus orienté mpl/dsel etc y'a C++ template metaprogramming, techniques and principles from boost and beyond. (Dave A.)


    Algorithmie

    -Dans beaucoup de problèmes, je rencontrent des graphes. Je n'ai AUCUNE connaissance mathématique ou théorique des graphes. S'il existe un livre qui traite des structures à utiliser pour stocker l'information, pour exécuter des algorithmes classiques (Djiskra par exemple), ... tout cela en c++ avec un vocabulaire de débutant, ce serait parfait.
    TAOCP de D. Knuth (c'est la bible) mais c'est pas en C++, (et tant mieux).

    Y a t-il déjà un bon livre sur c++1x (google répond plutôt rarement à mes questions quand j'ai un problème spécifique avec c++1x) ?
    Sur 1x en général pas à ma connaissance, après y'a des bouquins sur des parties spécifiques (je pense notamment au bouquin sur les threads d'1x par Anthony Williams.)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Y'a pas de réponse ultime pour "quand utiliser la POO". C'est d'une part l'expérience, et d'autre part le style de programmation, qui décide de ça.

    Pour les bouquins, je te conseillerais bien Modern C++ Design si tu veux te prendre une bonne claque et apprendre beaucoup de choses

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Alp Voir le message
    Pour les bouquins, je te conseillerais bien Modern C++ Design si tu veux te prendre une bonne claque et apprendre beaucoup de choses
    La beauté de ce livre étant qu'il est destiné à des fondus du cerveaux ayant une bonne compréhension des mécanismes techniques de compilation du C++.

    La problème de ce livré étant qu'il est destiné à des fondus du cerveaux ayant une bonne compréhension des mécanismes techniques de compilation du C++.

    Mais c'est vraiment un livre qui ouvre des portes sur le langage lui-même.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Points : 206
    Points
    206
    Par défaut
    Non, POO is not the silver bullet. (et accessoirement une telle chose n'existe pas :p).
    L'OO c'est bien, mais ça a ses limites et défauts (et y'en a pas mal).
    Bref, t'utilises un langage multiparadigme, profites-en.
    Alors, justement un livre qui explique quand l'OO est avantageux.

    Les allocateurs sérieux c'est pas compliqué pas besoin d'un bouquin pour ça.
    Ce n'est pas pour les écrire mais pour savoir quand faut-il réellement utiliser un allocateur spécifique. Il me semble que vu que list et vector allouent 2 fois plus d'élément à chaque fois, il n'y a pas de problème. De plus, il y a reserve...

    TAOCP de D. Knuth (c'est la bible)
    Accessible sans aucune connaissance mathématique ?

    mais c'est pas en C++
    C'est juste qu'en essayant d'implémenter djiskra, j'ai eut du mal avec le type de structure à créer pour représenter un graphe. Si c'est un livre orienté programmation et non juste mathématiques, cela peut convenir.
    Je vais voir ce que google me donne sur ce livre...

    Sur 1x en général pas à ma connaissance, après y'a des bouquins sur des parties spécifiques (je pense notamment au bouquin sur les threads d'1x par Anthony Williams.)
    Dommage, j'ai l'impression que 1x n'apporte pas tant que sa sur les threads (à par que maintenant il n'y a plus besoin de boost). J'ai peut être tord.

    Modern C++ Design


    J'ai l'impression que ce livre met en avant les templates (tant mieux je trouve que les templates est quelque chose d'extrêmement puissant que je prend plaisir à manipuler). Cependant, met-il aussi l'accent sur design patterns et POO ?

    De plus, est ce que Le langage C++ de Bjarne Stroustrup est un must ?

    Je rajoute que je n'ai pas de problèmes avec l'anglais si jamais un de ces livres n'est pas traduit.

  8. #8
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Si tu ne l'as jamais lu, un livre très formateur :
    Bjarne Stroustrup, Programming Principles and Practice Using C++, un ouvrage suprêmement bon. (voir http://www.stroustrup.com/Programming/ )

    aussi
    Scott Meyers, Effective C++

    sur la STL

    Josuttis, The C++ Standard Library

    et aussi sur les templates

    Vandervoorde et Josuttis C++ Templates

  9. #9
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Je pense qu'au bout d'un moment, à force d'éviter le formalisme / les maths, tu vas passer à côté de pas mal de choses. Y'a rien de tellement compliqué dans ce que tu veux faire, il faut juste trouver les ressources qui te sont les plus adaptées, et foncer

  10. #10
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Citation Envoyé par NoIdea Voir le message

    Modern C++ Design


    J'ai l'impression que ce livre met en avant les templates (tant mieux je trouve que les templates est quelque chose d'extrêmement puissant que je prend plaisir à manipuler). Cependant, met-il aussi l'accent sur design patterns et POO ?
    Ce livre pousse assez loin la généricité sans tomber (trop) dans la méta-prog (il y en a quelques éléments, mais pas tant que ca). C'est dans cette optique qu'Andrei Akexandrescu se sert des templates. Il introduit notamment les classes de politiques (et de traits) au début, qui est la technique centrale de tout le livre.

    Mais les sujets qu'ils traitent dans MC++D sont des outils classiques du C++ qui proviennent de problèmes classiques de conception ou techniques :
    - pointeurs intelligents/small object/dispatcher
    - DP du GoF (Visiteur, Factory, Command, Singleton)

  11. #11
    Membre actif

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Points : 206
    Points
    206
    Par défaut
    Je pense qu'au bout d'un moment, à force d'éviter le formalisme / les maths, tu vas passer à côté de pas mal de choses. Y'a rien de tellement compliqué dans ce que tu veux faire, il faut juste trouver les ressources qui te sont les plus adaptées, et foncer
    Je n'ai rien contre le formalisme/les math, cependant, je les distingue de l'informatique :
    Pour moi, l'informatique se doit d'être pratique et ne nécessite pas (ce qui ne veut pas dire qu'on ne peut pas) de preuves au sens mathématiques :
    Je trouve un algo qui marche, je ne cherche pas forcément plus loin. Alors qu'en math, une vraie preuve est nettement plus compliquée à trouver.
    Je ne cherche pas un livre qui m'explique la théorie des graphes, mais un livre qui peut me donner des moyens pour résoudre des problèmes nécessitant des graphes. Il me faut donc savoir créer une structure adaptée, créer des algorithmes dessus de complexité minimale (bon là on touche aussi au math, mais je n'ai pas besoin de comprendre comment cet algorithme fonctionne, il me suffit de savoir l'appliquer en c++).
    Cependant, si le livre me renseigne aussi sur ce que je souhaite, je n'ai rien contre.
    Je spécifie bien le "en c++" parce que dans la plupart (ou tous ?) des langages interprétés (ou fonctionnels ?), la notion de type n'existe pas. De même en math. Or, en c++, il peuvent rajouté une contrainte élevée (je n'ai rien contre les types : il permettent souvent du code plus safe, mais parfois...)




    Je crois que mon choix est fait et je vais prendre Modern C++ Design.
    Merci à tous. Après, pour les graphes ou POO, si vous voulez me proposer autre chose, n'hésitez pas !

  12. #12
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Je reviens un peu tard peut-être sur cette question (du ou des meilleurs livres), on lira sans doute avec profit là-dessus (si l'on est capable de lire l'anglais) :

    The most important C++ Books... Ever

    en commençant peut-être par le point de départ :
    http://www.artima.com/cppsource/top_cpp_books.html

  13. #13
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Le standard dans sa liste, il me fera toujours réver le Meyer...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  14. #14
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par NoIdea Voir le message
    Je n'ai rien contre le formalisme/les math, cependant, je les distingue de l'informatique :
    Pour moi, l'informatique se doit d'être pratique et ne nécessite pas (ce qui ne veut pas dire qu'on ne peut pas) de preuves au sens mathématiques
    Alors ca veut dire que :
    - tu vas louper de grosses optimisations car tu ne sauras pas comment se comporte tes algos en terme de complexité ou louper des strcutures non trivailes qui simplifient ton probleme (ex theorie des graphes)
    - tu vas manquer de recul sur pas mal de probleme. Je n'ai jamais été efficace et serein a ecrire des emta programmes qu'apres un bon cours sur la theorie des types (cf les cours de Gusieppe Castagna) et de lambda calcul.

  15. #15
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Bah c'est comme pour tout, l'info, il faut de la pratique... et de la théorie. Ca te donne du recul, une compréhension plus approfondie/globale, etc. Moi c'est comme Joel, j'ai beaucoup bidouillé au début, et j'ai abordé des aspects plus théoriques de ce que je faisais, et là tout s'éclaircit, vraiment. Tu franchis un cap quoi.

Discussions similaires

  1. Quel livre pour débuter ?
    Par Freed0 dans le forum Livres
    Réponses: 7
    Dernier message: 21/06/2007, 11h20
  2. [LIVRE] quel livre pour JSP?
    Par Athorus dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/01/2007, 17h41
  3. Quel livre pour bien commencer ?
    Par Geekolin dans le forum Contribuez
    Réponses: 54
    Dernier message: 19/09/2006, 13h31
  4. Quels livres pour débuter en J2EE ?
    Par arN34 dans le forum Java EE
    Réponses: 5
    Dernier message: 23/06/2006, 19h00
  5. [CR] Quel livre pour commencer Crystal en FR ?
    Par AYITE dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 17/01/2005, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo