La programmation en C++ moderne

Apprenez la programmation de zéro jusqu'à l'infini !

a marqué ce sujet comme résolu.

Salut à tous.

Merci @lmghs, j’ai pris la majeure partie de tes retours en compte. J’ai aussi mis des images pour illustrer le chapitre d’annexe, le rendant ainsi plus agréable. D’ailleurs, ta liste de bons livres C++, que tu as sur Openclassrooms dans ton profil, donne une 404.


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Avec plaisir,

D’ailleurs, ta liste de bons livres C++, que tu as sur Openclassrooms dans ton profil, donne une 404.

On me le dit souvent. Mais si j’ai bien compris, il faut être authentifié avec un compte google pour la voir. Ceci dit, tu ne perds rien, il s’agit essentiellement de livres de chez Addisson Wesley de l’ère C++03.

  • Accelerated C++: Practical Programming by Example‎ Mike Hendrickson, Andrew Koenig, Barbara E. Moo 336 pages Affichage d’extraits
  • Advanced C++ Programming Styles and Idioms‎ James O. Coplien 520 pages Affichage d’extraits
  • C++ Concurrency in Action: Practical Multithreading‎ Anthony Williams 506 pages Aucun aperçu disponible
  • C++ Cookbook‎ Ryan Stephens, Christopher Diggins, Jonathan Turkanis, Jeff Cogswell 592 pages Aucun aperçu disponible
  • C++ Gems: Programming Pearls from The C++ Report‎ Stanley B. Lippman 601 pages Aperçu limité
  • C++ Gotchas: Avoiding Common Problems in Coding and Design‎ Stephen C. Dewhurst 325 pages Aperçu limité
  • C++ Network Programming: Mastering complexity with ACE and patterns‎ Douglas C. Schmidt, Douglas C.. Schmidt, Stephen D. Huston 336 pages Aucun aperçu disponible
  • C++ Network Programming: Systematic reuse with ACE and frameworks‎ Douglas C. Schmidt, Stephen D. Huston 384 pages Aucun aperçu disponible
  • C++ Primer‎ Stanley B. Lippman, Josée Lajoie, Barbara E. Moo 1006 pages Aperçu limité
  • C++ Primer‎ Stanley Lippman, Josée Lajoie, Barbara Moo 976 pages Aperçu limité
  • C++ Templates: The Complete Guide, Portable Documents‎ David Vandevoorde, Nicolai M. Josuttis 552 pages Aperçu limité
  • Coder efficacement: Bonnes pratiques et erreurs à éviter (en C++)‎ Philippe Dunski 420 pages Aperçu limité
  • Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14‎ Scott Meyers 334 pages Aperçu limité
  • Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template …‎ Scott Meyers 260 pages Affichage d’extraits
  • Elements of Programming‎ Alexander A. Stepanov, Paul McJones 262 pages Aperçu limité
  • Essential C++‎ Stanley B. Lippman 276 pages Aucun aperçu disponible
  • Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions‎ Herb Sutter 208 pages Aperçu limité
  • Imperfect C++: Practical Solutions for Real-life Programming‎ Matthew Wilson 588 pages Affichage d’extraits
  • Je me lance !: une introduction à la programmation C plus-plus‎ Francis Glassborow 390 pages Aucun aperçu disponible
  • Modern C++ Design: Generic Programming and Design Patterns Applied‎ Andrei Alexandrescu, Debbie Lafferty 323 pages Aperçu limité
  • More C++ Gems‎ Robert C. Martin 525 pages Aperçu limité
  • More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and …‎ Herb Sutter 279 pages Aperçu limité
  • Multi-paradigm Design for C++‎ James O. Coplien 280 pages Affichage d’extraits
  • Programmation: Principes et pratique avec C++‎ Bjarne Stroustrup 915 pages Aucun aperçu disponible
  • Programming: Principles and Practice Using C++‎ Bjarne Stroustrup 1236 pages Aucun aperçu disponible
  • The C++ Standard Library: A Tutorial and Reference‎ Nicolai M. Josuttis 799 pages Aperçu limité

@mougnolribama : je n’ai pas compris ce que tu voulais dire par "liens bidirectionnels". Peux-tu développer s’il-te-plaît ?

informaticienzero

@mougnolribama : je n’ai pas compris ce que tu voulais dire par "liens bidirectionnels". Peux-tu développer s’il-te-plaît ?

Certains sites ont un sommaire qui envoient vers le titre d’une section. Et cliquer sur ce titre renvoie sur l’entrée du sommaire. C’est un truc auquel je n’ai jamais trouvé l’intérêt vu que j’utilise régulièrement ALT + left, ou un clic droit maintenu vers la gauche (mouse gesture), ou encore… home mais visiblement certains s’en servent… Probablement fort utile sur machines sans clavier ni souris genre des tablettes ou sous forme d’ebook. Si cela peut être automatisé… foncez ;)

lmghs

@informaticienzeror c’est exactement ce que @lmghs décrit. Par contre j’ai un clavier et c’est pour lire la version PDF que je demandais parce que je n’ai pas régulièrement accès à internet. J’ai cherché "mouse gesture". C’est sur Apple c’est ça? parce que j’ai essayé sans succès. Merci pour Alt + left @lmghs, ça va être utile.

+0 -0

J’ai cherché "mouse gesture". C’est sur Apple c’est ça? parce que j’ai essayé sans succès.

mougnolribama

Non. Je faisais référence à des extensions pour navigateur particulièrement addictives: La dernière en date que j’utilise est https://addons.mozilla.org/fr/firefox/addon/foxy-gestures/?utm_content=addons-manager-reviews-link&utm_medium=firefox-browser&utm_source=firefox-browser

Par contre, elle a des limitations à cause de restriction de sécurité dans FF. Elle n’est pas applicable à certaines pages, dont les pdf dans des onglets… Je crois bien qu’il existe des équivalents pour tous les navigateurs. Voire, maintenant que tu me parles de mac, je me demande s’il n’existe pas de telles extensions au niveau OS pour certains systèmes (google ne signale strokeplus pour Windows, il en existe d’autres). Sur les souris à plein de boutons on peut associer certains boutons à prev/next dans diverses applications aussi.

Salut à tous !

Au programme, j’ai ajouté la partie sur les modules dans le chapitre sur le découpage en fichiers et j’ai commencé le chapitre sur les classes templates.

Je ne sais pas exactement encore quelles notions seront abordées dedans, c’est dur de faire un choix. Il y a déjà la partie sur la syntaxe de base, ainsi qu’une partie prévue sur les concepts. Je compte aussi parler du fait qu’on peut passer des arguments non-types, qu’on peut spécialiser, mais je ne sais pas où m’arrêter. Il y a beaucoup à dire, mais tout n’est pas pertinent pour un lecteur débutant.

Merci à tous pour votre aide et vos relectures.

informaticienzero


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Salut à tous.

J’ai presque fini le chapitre sur les templates avancés. Je vais peut-être détailler encore un peu plus les concepts, donner quelques exemples de techniques avancées pour ceux qui veulent aller plus loin et m’arrêter là.

Une fois ce chapitre terminé, il restera à écrire la correction du Javaquarium, en prenant en compte vos éventuels retours. Ensuite, le tutoriel partira en validation et sera alors terminé. :)

Merci à tous pour votre aide dans cette dernière ligne droite.

informaticienzero


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Hello.

§ des handles.

Au niveau du diagramme pour choisir son handle, il y a à mon goût à la fois trop et pas assez de détails. Si on commence à parler de std::function, il faudrait alors parler des mutex, des sockets, des fichiers, des threads, etc. Du coup il y a une sorte de déséquilibre. D’un coté je tendrai à ne pas parler de plus de choses que des handles mémoire. De l’autre, s’il faut plus, function n’est pas celui qui me vient en premier. J’aurai mème plutôt tendance à le traiter uniquement au niveau des lambdas.

§ templates avancés

J’ai toujours un peu de mal avec le terme "avancé" car il existe souvent des aspects encore bien plus avancés, ici il y a toute la métaprog template qui part du simple traits, qui se complexifie à peine avec les politiques, avant d’exploser avec le SFINAE et bien d’autres techniques obscures.

premier

Pour la pile, on parle plutot du "sommet". Premier donne l’impression qu’il pourrait y avoir un deuxième, alors que non, on n’est pas du tout sur quelque chose d’itérable.

définition séparée

Cette solution ne nécessite aucune syntaxe supplémentaire mais rend le corps de la classe plus gros et donc moins lisible.

Mouais, je n’achète plus ces arguments. Dans les autres langages cela ne gêne personne (Java, C#, Python…). Sans parler que même avec Vim on peut replier son code, alors bon, l’argument du moins lisible en ignorant la complexité syntaxique des définitions séparées de fonctions membre templates de classes templates… L’impossibilité de renvoyer auto… A d’autres.

C’est juste qu’en C++, pour des raisons d’homogénéité on veut utiliser la définition séparée partout, et que l’on n’a pas le choix en cas de référence croisée.

m_pile

Cela fait plusieurs fois que je me pose cette question. Est-il normal d’appeler m_toto un machin utilisé en interne dans une classe Toto (classe qui modélise le concept toto) alors que le m_toto est techniquement une toute autre bête? Je vois régulièrement mes apprenants employer m_matrix (ou autres préfixes), pour désigner un std::vector<double> dans une classe Matrix.

Bonne pratique ou pas je n’en sais rien, par contre cela me fait tiquer à chaque fois. Certes, m_elements (ou pire m_buffer) ce n’est pas très parlant, mais quand on se balade entre plusieurs niveaux d’appels, cela me permet de voir plus vite à quel niveau je suis sans devoir aller chercher le nom de la classe courante.

Il y a des gens qui ont réfléchi à cette question?

.tpp

Je préciserai juste que c’est un choix de nom d’extension totalement arbitraire. Il n’y a pas de convention universelle reconnue par tout un chacun, IDE compris, sur la question. (et j’ai le droit de le dire, il me semble bien que ce choix de nom d’extension qui a fini dans la FAQ de dvpz, c’est ma faute)

valeur par défaut
// Et avec le C++ moderne, il n'y a même
// plus besoin d'écrire les chevrons <>.
Pile const p2 {};

Pas "moderne", 17. (indépendamment du fait que je vois la modernité plus comme une philosophie d’utilisation qui rompt avec des traditions hérités d’ailleurs et d’antan sans fondement dans un écosystème C++)

"concepts révolutionnaires"

Euh… La révolution a rejoint le standard en 94: https://www.drdobbs.com/cpp/the-sgi-standard-template-library/184410249 et https://web.archive.org/web/20120117045611/http://www.sgi.com:80/tech/stl/stl_introduction.html OK, les concepts n’était alors qu’un concept :D

Salut @lmghs, merci pour tes retours.

§ des handles.

Au niveau du diagramme pour choisir son handle, il y a à mon goût à la fois trop et pas assez de détails. Si on commence à parler de std::function, il faudrait alors parler des mutex, des sockets, des fichiers, des threads, etc. Du coup il y a une sorte de déséquilibre. D’un coté je tendrai à ne pas parler de plus de choses que des handles mémoire. De l’autre, s’il faut plus, function n’est pas celui qui me vient en premier. J’aurai mème plutôt tendance à le traiter uniquement au niveau des lambdas.

lmghs

J’ai précisé que ne sont pas tous les handles qui existent et que ce schéma ne couvre que ceux vus dans ce cours. J’avoue avoir la flemme immense de le refaire (même si c’est @mehdidou99 l’auteur original).

§ templates avancés

J’ai toujours un peu de mal avec le terme "avancé" car il existe souvent des aspects encore bien plus avancés, ici il y a toute la métaprog template qui part du simple traits, qui se complexifie à peine avec les politiques, avant d’exploser avec le SFINAE et bien d’autres techniques obscures.

lmghs

J’ai modifié le titre parce que oui, ce chapitre ne traite pas de sujets avancés.

premier

Pour la pile, on parle plutot du "sommet". Premier donne l’impression qu’il pourrait y avoir un deuxième, alors que non, on n’est pas du tout sur quelque chose d’itérable.

lmghs

Corrigé.

définition séparée

Cette solution ne nécessite aucune syntaxe supplémentaire mais rend le corps de la classe plus gros et donc moins lisible.

Mouais, je n’achète plus ces arguments. Dans les autres langages cela ne gêne personne (Java, C#, Python…). Sans parler que même avec Vim on peut replier son code, alors bon, l’argument du moins lisible en ignorant la complexité syntaxique des définitions séparées de fonctions membre templates de classes templates… L’impossibilité de renvoyer auto… A d’autres.

C’est juste qu’en C++, pour des raisons d’homogénéité on veut utiliser la définition séparée partout, et que l’on n’a pas le choix en cas de référence croisée.

lmghs

C’est un bon argument, effectivement, en C# ça ne m’a jamais dérangé. Donc je modifie.

.tpp

Je préciserai juste que c’est un choix de nom d’extension totalement arbitraire. Il n’y a pas de convention universelle reconnue par tout un chacun, IDE compris, sur la question. (et j’ai le droit de le dire, il me semble bien que ce choix de nom d’extension qui a fini dans la FAQ de dvpz, c’est ma faute)

lmghs

Note ajoutée.

valeur par défaut
// Et avec le C++ moderne, il n'y a même
// plus besoin d'écrire les chevrons <>.
Pile const p2 {};

Pas "moderne", 17. (indépendamment du fait que je vois la modernité plus comme une philosophie d’utilisation qui rompt avec des traditions hérités d’ailleurs et d’antan sans fondement dans un écosystème C++)

lmghs

Corrigé.

"concepts révolutionnaires"

Euh… La révolution a rejoint le standard en 94: https://www.drdobbs.com/cpp/the-sgi-standard-template-library/184410249 et https://web.archive.org/web/20120117045611/http://www.sgi.com:80/tech/stl/stl_introduction.html OK, les concepts n’était alors qu’un concept :D

lmghs

Le titre est maladroit, mais je ne dis pas que les templates ou la STL sont de C++20, simplement que ce qu’on nomme désormais les concepts a été pleinement rendu utilisable depuis cette norme.

Bonjour, je viens de lire le chapitre 5 de la partie orienté objet "classes à sémantique d’entité" et sous la section "Des sous-types…" > "Une question de visibilité", j’aurais trouvé bien de parler de mot clé "protected" à ce moment là. Sinon très bon tutoriel merci :D

Bonne question. Techniquement parlant, cela s’applique aussi à l’héritage privé, et ce n’est pas une bonne pratique sur les données.

Je trouve qu’il y a un coté avancé à permettre à une classe fille à employer un service interne défini au niveau parent.

Je ne sais pas ce que les autres en pensent.

Je trouve ça pertinent dans la mesure où cela permet généralement d’avoir des méthodes "par défaut", en subsumant un ensemble de classes filles sous une seule classe mère. Mais je comprends ton point de vue, et je pense que les deux se défendent.

Peut-être juste mentionner l’existence de ce mot-clé dans cette partie en précisant que ce sera reprécisé plus tard et qu’il vaut mieux éviter son utilisation pour le moment ?

Qu’entends-tu par "par défaut"? Cela ne m’inspire pas de rapport.

Peut-être parce qu’en général je vise le design pattern template method (et cousins comme le NVI), et du coup, le besoin de fonctions protégés est moindre. Souvent je bosse au milieu d’un framework un peu complexe et je râle souvent après l’architecture où justement tout est protégé, avec dans l’idée d’appeler à la main des services parents qui sont totalement incomplets.

In-fine protected semble simplifier la vie, mais il complique le design. Ca me laisse un peu la même impression que la programmation excessivement défensive: on avance, on avance, on n’a pas le temps pour prendre du recul, et après on rame, on rame.

D’où mes questions: Suis-je un des seuls à éviter la portée protégée? Et qu’en est-il des progressions pédagogiques: vaut-il mieux l’énoncer/le présenter tôt? Ou considérer que c’est un topic avancé et qu’il est trop tôt pour en parler? Dans mes formations, je sais que j’en parle après.

PS: le teasing "on verra plus tard" me parait se tenir.

Je suis pas un habitué, mais dans la template method, tu fais en sorte de réunir tout le code dans la class parent, non ? A moins que tu aies pris l’habitude de systématiquement les mettre en abstract ?

Personnellement, j’ai jamais eu de soucis à utiliser la portée protected quand je faisais du C++ justement car je l’utilisais surtout pour économiser des redites de code. Du nested code à gogo en quelque sorte :s

Après, vraiment, ça se tient. Mais dans l’étude du langage, je trouve que c’est un peu dommage de mettre à plus loin la portée protected, puisque sa non utilisation dépend surtout du pattern que t’utilises.

Mais comme dit plus haut, les deux se défendent je pense.

Je suis pas un habitué, mais dans la template method, tu fais en sorte de réunir tout le code dans la class parent, non ? A moins que tu aies pris l’habitude de systématiquement les mettre en abstract ?

Le code commun est au niveau parent, en effet, dans une fonction membre typiquement non virtuelle. Et y on fait appel à des fonctions virtuelles (les points de variations identifiés), typiquement privées. On retrouve l’exemple du cours avec les appareils de dépoussiérage.

Au lieu d’appeler le code commun depuis les spécialisations, c’est le code commun qui dispose de points de variations qui sont spécialisés dans les classes filles. C’est plus qu’une question de pattern. Je pense aujourd’hui que c’est le désign qui scale, mais qui est très demandeur il peut imposer de refactoriser le code en profondeur à contrario de l’exposition de détails entre générations.

A mes débuts, j’avais tendance à mettre plutôt des fonctions virtuelles qui appelaient leur version parente. Et si je voyais que cela ne faisait pas parti de l’API de la classe, je les mettaient protégées. Comme mes données membres. Des fois que. Car on ne savait jamais. Avec le recul, ces désigns n’étaient pas bons. Et je comprends d’où vient la règle qualité MISRA 2008 qui interdit (ou décourage fortement, je ne sais plus) plus d’un niveau d’héritage.

Le cours a fait le choix de ne pas parler des aspects syntaxiques avancés en débuts. Ainsi, ce n’est pas new[] mais array et vector qui sont présentés en premier — c’est une histoire de progression pédagogique en mettant l’accent sur les bonnes pratiques en premier. Pour protected, j’ai l’impression qu’un choix similaire a été fait.

Bonjour, Je suis se cours et étant au tp de la matrice je me demande est il préférable que je continue a suivre la suite de se cours quand il sera plus en bêta ? Pensez vous qu’il y’auras de gros changements entre la bêta et la version officielle ? En tout cas, Merci pour se cours !

+0 -0

Bonjour Toto77,

Le cours est pratiquement fini, il est en cours de relecture avant publication.

Comme tu viens de t’inscrire, tu as maintenant accès à la version bêta, donc tu as déjà accès au cours complet, et tu peux même faire des commentaires sur ce cours.

Bien sûr qu’il faut que tu continues ce cours !

Cordialement.

Salut à tous.

Au fur et à mesure que je convertis les chapitres de la partie POO vers le format DocBook, je me rends compte de deux trois petits détails qui ne vont pas. Dans cette bêta, j’ai notamment modifié le chapitre sur les handles car certains des exemples donnés ne me plaisaient pas.

Merci d’avance pour vos retours précieux.

informaticienzero


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Salut à tous.

Aujourd’hui, j’ai réécris la première section du chapitre sur la sémantique de mouvement, qui ne me plaisait pas. N’hésitez pas à la relire et à me dire de ce que vous pensez de mes modifications.

Merci d’avance à tous. :)

informaticienzero


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Salut à tous,

On a décidé de compléter un peu le chapitre sur les classes templates en parlant des traits et des politiques, sans aller jusqu’à écrire un chapitre de métaprogrammation non plus. N’hésitez pas à nous faire des retours. Merci à tous. :)

informaticienzero


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Salut à tous,

Voilà, on a fini la partie sur les traits et sur les concepts, je suis en train d’attaquer la partie sur les politiques. Il ne reste que ça, le Javaquarium et on aura fini la partie POO.

Merci d’avance à tous pour vos commentaires.

informaticienzero


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte