Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
programmez_avec_le_langage_c [2016/12/08 22:05] gbdivers |
programmez_avec_le_langage_c [2019/12/27 19:58] (Version actuelle) gbdivers |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Débuter en C++ moderne - Tome 1 ====== | ||
- | ** Cours de C++ moderne ** | + | <note warning>Ce cours n'est plus à jour, il est préférable de ne pas le suivre. Je vous recommande le cours sur Zeste de Savoir : https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/.</note> |
- | ** Création d'applications en C++ moderne par la pratique ** | ||
- | ===== Avant-propos ===== | ||
- | |||
- | * [[Introduction]] | ||
- | * [[Comment suivre ce cours]] | ||
- | * [[Comment réaliser les exercices de ce cours]] | ||
- | * [[Demander de l'aide et aider les autres]] | ||
- | * [[normes et compilateurs]] | ||
- | * [[autres langages]] | ||
- | |||
- | ===== Premiers pas ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[Programme minimal]] | ||
- | * [[Hello world]] | ||
- | * [[chaines]] | ||
- | * [[qualité logiciel]] | ||
- | * [[erreurs]] qu'est ce qu'une erreur ? (erreur de programmation, assert, exception, etc). Comment reagir a une erreur ? Chemins differents entre valeur retournee et exception (et contexte de traitement different). Comparaison std::find/new (exemple allocation ressource jeux). optional: pas de contexte transmis. rethrow = changed le contexte transmis. | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[histoire]] | ||
- | * [[doc]] | ||
- | |||
- | ===== Bases du calcul numérique ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[Calculs arithmétiques]] | ||
- | * [[Logique et calcul booléen]] | ||
- | * [[Nombres réels]] | ||
- | * [[string]] | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[boole et morgan]] | ||
- | * [[complex]] | ||
- | * [[virgule fixe]] | ||
- | * [[ratio]] | ||
- | |||
- | ===== Conserver les valeurs en mémoire ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[rvalue et lvalue]] | ||
- | * [[enum class]] | ||
- | * [[inférence de type]] | ||
- | * [[types en détail]] | ||
- | * [[informations sur les types]] | ||
- | * [[définir ses types]] | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[Nombres aléatoires]] | ||
- | |||
- | ===== Collections et algorithmes ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[collection]] | ||
- | * [[map]] | ||
- | * [[collection2]] | ||
- | * [[comparer]] | ||
- | * [[rechercher]] | ||
- | * [[itérateurs]] | ||
- | * [[autres collections]] | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[bitset]] | ||
- | |||
- | ===== Chaînes avancées et expressions régulières ===== | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[string étendu]] | ||
- | * [[expressions régulières]] | ||
- | * [[expressions régulières 2]] | ||
- | * [[expressions régulières 3]] | ||
- | * [[validation motifs]] | ||
- | |||
- | ===== Créer des fonctions ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[fonctions]] | ||
- | * [[paramètres arguments]] | ||
- | * [[references]] | ||
- | * [[surcharge fonctions]] | ||
- | * [[prédicats]] | ||
- | * [[fonctions génériques]] | ||
- | |||
- | === Compléments === | ||
- | |||
- | |||
- | * [[callable]] | ||
- | * [[perfect forwarding]] | ||
- | * [[rvalue, lvalue et leur amis]] | ||
- | * [[pile]] | ||
- | * constexpr | ||
- | * [[aliasing]] | ||
- | |||
- | ===== Créer des algorithmes ===== | ||
- | |||
- | <note warning>Les chapitres suivants sont encore en cours de rédaction, voire à l'état d'ébauche. N’hésitez pas a faire des remarques ou poser des questions sur le forum de [[http://zestedesavoir.com/forums/|Zeste de Savoir]] ou de [[http://openclassrooms.com/forum/sujet/nouveau-cours-c-moderne|OpenClassroom]].</note> | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[structure de contrôle]] | ||
- | * [[boucles]] | ||
- | * [[recursivite]] | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[Pair et tuple]] | ||
- | * [[variadic]] | ||
- | * [[static]], mémoire static, string table | ||
- | * [[init C++17]] | ||
- | * break, continue, goto | ||
- | |||
- | |||
- | ===== Entrées et sorties ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[io]] | ||
- | * [[ligne de commande]] | ||
- | * [[cin]] | ||
- | * [[fichier]] | ||
- | |||
- | === Compléments === | ||
- | |||
- | * cout en detail | ||
- | * variables d'environnement | ||
- | * signals, abort, exit | ||
- | * gestion des buffers avec les streams, concepts de latence, debit, cache. | ||
- | |||
- | |||
- | ===== Concevoir une bibliothèque ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[compilation séparée]] https://akrzemi1.wordpress.com/2016/11/28/the-one-definition-rule/ | ||
- | * documentation, commentaire, codes d'exemple | ||
- | * [[gérer les erreurs]] | ||
- | * [[tests unitaires]] | ||
- | * [[performances]] | ||
- | * [[conception bibliothèque]], interface publique, réutilisabilité. "Easy to use correctly, hard to use incorrectly" - Scott Meyers. Design interface : s'adapter aux conventions qui existent. Etre consistant | ||
- | * modules, conception en couches, utilisation de n-1 et n+1 | ||
- | * namespace, dépendances. l'espace de noms global et anonyme :: | ||
- | * pré-condition et post-condition | ||
- | * physical design | ||
- | * variables globales, étude de std::cout | ||
- | * abi et C | ||
- | * macro, pré-processeur, directive de compilation | ||
- | |||
- | https://www.famkruithof.net/uuid/uuidgen | ||
- | |||
- | |||
- | ===== Les outils de développement ===== | ||
- | |||
- | * [[build system]] | ||
- | * [[IDE]] | ||
- | * [[compilateur]] | ||
- | * [[débogueur]] | ||
- | * [[validation statique]] | ||
- | * [[validation style]] | ||
- | * [[documentation]] | ||
- | * [[gestion versions]] | ||
- | * [[tests]] | ||
- | * [[déployer]] | ||
- | * [[bug tracker]] | ||
- | |||
- | https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md | ||
- | |||
- | ===== Les classes à sémantique de valeur ===== | ||
- | |||
- | * [[poo]] | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[classe]] | ||
- | * [[constructeurs]] | ||
- | * [[opérateurs]] | ||
- | * [[conversions]] http://cpptruths.blogspot.de/2015/11/covariance-and-contravariance-in-c.html | ||
- | * * allocation et liberation de ressources, raii | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[swap]] | ||
- | * [[SOLID]] | ||
- | * [[design pattern]] | ||
- | * [[object function]] | ||
- | * chaining methods | ||
- | |||
- | === Pratiquer === | ||
- | |||
- | * [[sémantique conteneur]] | ||
- | * [[string_view]] | ||
- | * [[user iterator]] | ||
- | * [[wrapper]] | ||
- | * traits : adapter les type_traits pour fonctionner avec vos classes | ||
- | |||
- | ===== Les classes à sémantique d'entité ===== | ||
- | |||
- | === Langage === | ||
- | |||
- | * [[sémantique d'entité]] | ||
- | * [[héritage]] | ||
- | * [[polymorphisme et pointeurs]] | ||
- | * [[fonction virtuel]] | ||
- | * [[invariant de classe]] | ||
- | |||
- | === Compléments === | ||
- | |||
- | * [[Pile et Tas]], création et destruction | ||
- | * théorie des graphes, arbres | ||
- | * héritage multiple | ||
- | * pourquoi les manipuler via indirections ? aliasing, smart ptr | ||
- | |||
- | * points de variation : comment faire varier le comportement d'un programme ? (directive de compilation, template police/traits, héritage, DP stratégie) Quand utiliser quelle technique ? Impact sur la qualité du code (maintenabilité, évolutivité, etc) | ||
- | * durée de vie et propriétaire des objets | ||
- | |||
- | calculateur de systeme de vote de condorcet | ||
- | |||
- | === Pratiquer === | ||
- | |||
- | * jeu d'échec | ||
- | * évaluation de script (if, for, etc) | ||
- | * article citation format (type medline) | ||
- | * http://progdupeu.pl/forums/sujet/205/banque-dexercices | ||
- | * factory. Créer une fonction factory avec switch, avec create, avec allocator | ||
- | * système de gestion d'événements | ||
- | |||
- | ===== Bibliothèques externes ===== | ||
- | |||
- | * [[libs]] | ||
- | * internationalisation : ICU | ||
- | * interface utilisateur : Qt, SFML | ||
- | * réseau : boost.asio, POCO, QtNetwork | ||
- | * XML : QtXml | ||
- | * base de données : QtSql | ||
- | * web : wt | ||
- | * script : boost.python, QtScript | ||
- | * https://cpp.libhunt.com/ | ||
- | * http://fffaraz.github.io/awesome-cpp/ | ||
- | * http://en.cppreference.com/w/cpp/links/libs | ||
- | |||
- | ---- | ||
- | ====== Le C++03 ====== | ||
- | |||
- | * [[old C++]] | ||
- | * [[string style C]] | ||
- | * [[tableaux style C]] | ||
- | * [[pointeurs style C]], surcharge opérateurs d'accès -> * &, etc + surcharge opérateur new et delete, pointeur de fonction | ||
- | |||
- | === Pratiquer (A trier) === | ||
- | |||
- | * [[parser]] | ||
- | * [[eval]] | ||
- | * [[intervalle]] | ||
- | * [[zip unzip]] | ||
- | * [[chiffres]] | ||
- | * [[modèle texte]] | ||
- | * XML | ||
- | * [[tableur]] | ||
- | * [[bitmap]] | ||
- | * [[sample]] | ||
- | * [[poker]] | ||
- | * [[sous chaines]] | ||
- | * [[zebra puzzle]] | ||
- | * [[scrabble]] | ||
- | * [[regex parser]] | ||
- | * imagerie : génération d'arbres avec L-System | ||
- | * implémenter des générateurs aléatoires cryptographiques | ||
- | * créer un systeme d'allocation memoire (tas). Allocator, utilisation des espaces libres, défragmentation | ||
- | * buffer avec vector | ||
- | * http://martinfowler.com/bliki/CQRS.html | ||
- | * https://en.wikipedia.org/wiki/Fizz_buzz | ||
- | |||
- | Notes: | ||
- | |||
- | * conversion implicite et explicite | ||
- | * indirections, adaptateurs, raw ptr/ref | ||
- | * "Make interfaces easy to use correctly and hard to use incorrectly" - Scott Meyers | ||
- | |||
- | https://sciencetonnante.wordpress.com/2015/10/16/la-machine-a-inventer-des-mots-video/ | ||
- | https://github.com/fffaraz/awesome-cpp | ||
- | https://github.com/rigtorp/awesome-modern-cpp | ||
- | https://www.reddit.com/r/dailyprogrammer/ | ||
- | http://morpheo.inrialpes.fr/people/Boyer/index.php?id=m1-mosig | ||
- | |||
- | ====== À suivre... ====== | ||
- | |||
- | [[en cours]] |