Programmation • IoT

Partie I - Les bases du C++

Chapitre 1 – Hello World et structures de base

Chap 1 – Hello World et structures de base Ce chapitre a pour objectif d’accompagner le lecteur dans ses premiers pas en C++. Il part volontairement du programme le plus simple possible, puis introduit progressivement les éléments indispensables à la compréhension et à l’écriture d’un programme. L’étude de la fonction

Lire la suite »

Chapitre 2 – Les variables et la mémoire

Résumé Ce chapitre a pour objectif de montrer ce qu’est réellement une variable en C++. Au-delà de son nom et de sa valeur, une variable est présentée comme un objet possédant un type, une taille et une adresse dans la mémoire de l’ordinateur. À partir d’un programme très simple, le

Lire la suite »

Chapitre 3 – Les références

Résumé : Chap 3 – Les références Ce chapitre a pour objectif d’introduire la notion de référence en C++ et de montrer qu’elle constitue un second nom, ou alias, donné à un objet déjà existant. À partir d’un programme simple, le lecteur observe qu’une variable et sa référence donnent accès

Lire la suite »

Chapitre 4 – Les pointeurs

Résumé : Chap 4 – Les pointeurs Ce chapitre a pour objectif d’introduire les pointeurs en s’appuyant sur les notions de variable, d’adresse mémoire et de référence étudiées précédemment. Le lecteur découvre tout d’abord qu’une adresse mémoire est une valeur qui peut être conservée dans une variable. Une variable spécialement

Lire la suite »

Chapitre 5 – Les fonctions

Résumé : Chap 5 – Les fonctions Ce chapitre a pour objectif d’apprendre à décomposer un programme C++ en fonctions simples, chacune étant chargée d’accomplir une tâche clairement définie. Une fonction est présentée comme un bloc d’instructions possédant un nom. Elle peut être appelée chaque fois que son traitement est

Lire la suite »

Chapitre 6 – La récursivité

Résumé : Chap 6 – La récursivité Ce chapitre a pour objectif de présenter la récursivité comme une autre manière de répéter un traitement. Au lieu d’utiliser une boucle, une fonction récursive s’appelle elle-même pour résoudre progressivement un problème. Le lecteur apprend à distinguer l’itération, fondée sur des structures comme

Lire la suite »

Chapitre 7 – Les espaces de noms

Résumé – Chap 7 – Les espaces de noms Ce chapitre a pour objectif d’introduire les espaces de noms, appelés namespace en C++, et de montrer leur rôle dans l’organisation des programmes. Lorsqu’un projet grandit, il contient de plus en plus de fonctions, de variables et de classes. Plusieurs éléments

Lire la suite »

Chapitre 8 – Les tableaux

Résumé – Chap 8 – Les tableaux Ce chapitre a pour objectif d’introduire les tableaux comme un moyen de regrouper plusieurs valeurs de même type sous un seul nom. Jusqu’à présent, chaque variable ne contenait qu’une seule valeur. Cette approche devient peu pratique lorsqu’un programme doit mémoriser un grand nombre

Lire la suite »

Chapitre 9 – Les chaînes de caractères

Résumé : Chap 9 – Les chaînes de caractères Ce chapitre a pour objectif d’expliquer comment le C++ représente et manipule les textes à l’aide de tableaux de caractères. Une variable de type char ne peut contenir qu’un seul caractère. Pour mémoriser un mot ou une phrase, il faut donc

Lire la suite »

Chapitre 10 – Les structures

Résumé : Chap 10 – Les structures Ce chapitre a pour objectif de montrer comment le C++ permet de créer des types de données adaptés aux informations que l’on souhaite représenter. Jusqu’à présent, les programmes utilisaient principalement des variables indépendantes de type int, double ou char. Certaines informations sont pourtant

Lire la suite »

Chapitre 11 – Passage de paramètres à une fonction

Résumé : Chap 11 – Passage de paramètres à une fonction Ce chapitre a pour objectif d’expliquer les différentes manières de transmettre des données à une fonction et d’apprendre à choisir la méthode adaptée à chaque situation. Ce choix influence directement le comportement de la fonction, les performances du programme

Lire la suite »

Partie II - La programmation orientée objet - Templates

Chapitre 1 – Les classes

Résumé : Chap 1 – Les classes Ce chapitre a pour objectif d’introduire les classes, qui constituent l’un des fondements de la programmation orientée objet en C++. Il commence par montrer comment organiser un projet important dans plusieurs fichiers. Le fichier principal contient le déroulement général, le fichier d’en-tête décrit

Lire la suite »

Chapitre 2 – L’encapsulation

Résumé : Chap 2 – L’encapsulation Ce chapitre a pour objectif d’approfondir l’encapsulation en construisant progressivement une classe représentant un vecteur dans le plan. Une première version de la classe expose directement les composantes x et y. Cette solution est simple, mais elle permet à toutes les parties du programme

Lire la suite »

Chapitre 3 – L’héritage

Résumé : Chap 3 – L’héritage Ce chapitre a pour objectif d’introduire l’héritage comme un mécanisme permettant de construire une classe spécialisée à partir d’une classe plus générale. Il commence par comparer les vecteurs à deux et à trois dimensions. Malgré leurs nombreuses ressemblances, un vecteur quelconque de l’espace n’est

Lire la suite »

Chapitre 4 – Le polymorphisme

Résumé – Chap 4 – Le polymorphisme Ce chapitre a pour objectif de montrer comment des objets appartenant à des classes différentes peuvent être manipulés à travers une interface commune tout en conservant leur comportement propre. Les classes Carre et Disque représentent des formes différentes, mais elles proposent toutes deux

Lire la suite »

Chapitre 5 – Surcharge d’opérateur

Résumé : Chap 5 – La surcharge d’opérateurs Lorsque nous créons une classe, le compilateur connaît sa structure, mais il ne peut pas deviner ce que doivent signifier les opérateurs appliqués à ses objets. L’addition de deux nombres complexes est évidente pour le mathématicien, mais l’expression z1 + z2 n’a

Lire la suite »

Chapitre 6 – Compositions et relations entre classes

Résumé : Chapitre 6 – Composition et relations entre classes Un programme orienté objet ne se construit pas uniquement avec des classes isolées ou reliées par héritage. Les objets doivent aussi collaborer et certains constituent naturellement des parties d’objets plus complexes. Une voiture, par exemple, n’est pas un moteur :

Lire la suite »

Chapitre 7 – Conversions de types et transtypage

Chap 7 – Conversions de types et transtypage Le C++ est fortement typé : le type d’une valeur détermine sa représentation et les opérations qui peuvent lui être appliquées. Un programme doit pourtant souvent faire interagir des valeurs de types différents. La conversion permet cette adaptation, mais elle ne doit

Lire la suite »

Chapitre 9 – La classe Matrice<T>

Résumé – Chap 9 – La classe Matrice<T> La première version de Matrice stockait uniquement des coefficients de type double. Créer ensuite une classe pour les int, une autre pour les float et ainsi de suite obligerait à recopier les mêmes algorithmes. Le but du chapitre est donc de transformer

Lire la suite »

Partie III - Gestion dynamique de la mémoire

Chapitre 1 – L’allocation dynamique de la mémoire

Résumé : Chap 1 – L’allocation dynamique de la mémoire Ce chapitre a pour objectif d’expliquer comment la mémoire est organisée et comment un programme C++ peut réserver puis libérer de la mémoire pendant son exécution. Il commence par rappeler que toute variable possède une taille et une adresse. L’opérateur

Lire la suite »

Chapitre 2 – La copie des objets

Résumé – Chap 2 – La copie des objets Ce chapitre a pour objectif d’expliquer comment la mémoire est organisée et comment un programme C++ peut réserver puis libérer de la mémoire pendant son exécution. Il commence par rappeler que toute variable possède une taille et une adresse. L’opérateur sizeof

Lire la suite »

Partie IV : C++ moderne et RAII

Chapitre 1 – RAII et gestion moderne des ressources

Résumé : Chap 1 – RAII et gestion moderne des ressources La gestion manuelle des ressources impose au programmeur de veiller lui-même à leur libération. Une allocation réalisée avec new ou new[] doit ainsi être suivie du delete correspondant, quel que soit le chemin suivi par le programme. Une sortie

Lire la suite »

Chapitre 2 – std::unique_ptr et la propriété exclusive

Résumé : Chap 2 – std::unique_ptr et la propriété exclusive std::unique_ptr applique le principe RAII à une ressource possédant un propriétaire unique. Au lieu de conserver un pointeur brut vers un objet créé dynamiquement et de devoir penser à appeler delete au moment approprié, on confie la ressource à un

Lire la suite »

Chapitre 3 – La sémantiquement de déplacement

Résumé – Chap 3 – La sémantique de déplacement La sémantique de déplacement répond à une situation différente de la copie. Lors d’une copie, l’objet d’origine conserve son contenu tandis qu’un nouvel objet reçoit sa propre copie de la ressource. Cette opération peut devenir coûteuse lorsqu’un objet possède, par exemple,

Lire la suite »

Chapitre 4 – stp::unique_ptr en pratique

Chap 4 – std::unique_ptr en pratique Après l’étude de la sémantique de déplacement, std::unique_ptr peut être utilisé pleinement comme outil de gestion d’une ressource à propriétaire unique. La création d’un objet dynamique se fait généralement avec std::make_unique, qui construit l’objet et confie immédiatement sa propriété au unique_ptr. L’accès à la

Lire la suite »

Chapitre 5 – std::shared_ptr et std::weak_ptr

Résumé – Chap 5 – std::shared_ptr et std::weak_ptr std::unique_ptr convient lorsqu’une ressource possède un seul propriétaire, mais certaines architectures nécessitent que plusieurs objets partagent réellement la propriété d’une même ressource. std::shared_ptr répond à cette situation : plusieurs shared_ptr peuvent désigner le même objet et chacun participe à sa propriété. Contrairement

Lire la suite »

Chapitre 6 – stp::vector et les conteneurs modernes

Résumé – Chap 6 – std::vector et les conteneurs modernes La gestion manuelle d’un tableau dynamique impose au programmeur de s’occuper de l’allocation avec new[], de la libération avec delete[], de la taille de la zone, ainsi que des éventuelles opérations de copie ou de redimensionnement. Les conteneurs de la

Lire la suite »

Chapitre 7 – Intégrateurs et algorithmes de la bibliothèque standard

Résumé – Chap 7 – Itérateurs et algorithmes de la bibliothèque standard Les conteneurs de la bibliothèque standard n’organisent pas tous leurs éléments de la même manière : std::vector permet un accès direct par indice, alors que d’autres structures, comme std::list, ne le permettent pas. Les itérateurs fournissent une manière

Lire la suite »

Chapitre 8 – Les expressions lambda

Résumé – Chap 8 – Les expressions lambda Une expression lambda permet de définir directement une opération à l’endroit où elle doit être utilisée, sans devoir créer séparément une fonction classique. Elle est particulièrement adaptée aux algorithmes de la bibliothèque standard auxquels il faut fournir un comportement, par exemple une

Lire la suite »

Chapitre 9 – Quelques outils du C++ moderne

Résumé – Chap 9 – Quelques outils du C++ moderne Le C++ moderne apporte plusieurs outils qui ne modifient pas fondamentalement la manière de programmer, mais rendent le code plus lisible, plus sûr et plus expressif. auto permet au compilateur de déduire le type d’une variable à partir de son

Lire la suite »

Chapitre 10 – Rule of Zero

Résumé – Chap 10 – Rule of Zero Lorsqu’une classe gère elle-même une ressource dynamique, le destructeur n’est rapidement plus la seule fonction spéciale dont il faut se préoccuper. Une classe contenant un pointeur vers une zone allouée dynamiquement peut libérer cette mémoire dans son destructeur, mais la copie par

Lire la suite »