Sommaire
Introduction
La programmation objet
Les types de base
Surcharger fonctions et opérateurs
Héritage
Modèles ("templates")
Exceptions
Gestion des ressources
La bibliothèque standard
Références et autres liens
Exercices
Exercices
cplusplus
FAQ C++
BOOST
Introduction au C++ et à la programmation objet
Version 22.0
(Mai 2022)
Introduction
Avertissement
Symboles et conventions
Impasses
Un peu d'histoire
La programmation objet
Poser un problème
La programmation objets expliquée aux programmeurs
L'approche procédurale
Qu'est-ce qu'une fonction ?
Variables locales ou globales
Approche modulaire:
Interface publique...
...Implémentation cachée
Encapsulation des données
Prototypage
Approche objets:
Des objets intégrés au système de typage
Classer les objets
Définir des piles de n'importe quoi
Faire du neuf avec du vieux
Des bibliothèques d'objets
La programmation objets expliquée aux gens normaux
Une cafétéria informatisée
Le café en programmation procédurale
Le café en programmation objet
Modéliser une cafetière
qu'est-ce qu'une cafetière ?
Une cafetière est une cafetière, mais il y en a plusieurs sortes
boutons marche-arrêt ou autres réglages
Voyants
Programme principal
Des programmes plus robustes
Classes et objets
L'état d'un objet
Le comportement d'un objet
L'identité d'un objet
Des objets "métiers"
Relations entre objets
Au coeur des langages C/C++
Les expressions
Les instructions
Les constantes en langage C
Déclarations de variables
Les types de base
Les types dérivés
Les tableaux
Les structures
Les unions
Pointeurs (*), références (&), descripteur const
Analogies avec le monde dit "réel"
Initialisation = Clônage
Opérateur= : Je me prends pour un autre
Références = Surnoms
Pointeurs = Attention, on vous montre du doigt
Passage des paramètres par valeur
Passage du client par référence
Passage du coiffeur par const référence
Retour d'un paramètre par valeur
Retour d'un paramètre par référence
Retour d'un paramètre par pointeur
Retour au monde virtuel
Le type référence
Le type pointeur
Une référence, pour quoi faire ?
Le descripteur const
Pointeurs sur une structure
Allocation mémoire
Le type class
Sections privées, protégées, publiques
Section public
Section protected
Fonctions membres
Fonctions amies
Accès aux données
Constructeurs
Destructeur
Le descripteur
static
Le descripteur const
Le pointeur *this
Surcharger fonctions et opérateurs
Modifier une fonction sans remettre en cause l'existant
Déclaration et définition de fonctions
Surcharge de fonctions
Le constructeur de copie
Valeurs par défaut des arguments
Valeurs par défaut et constructeurs
Surcharger les opérateurs
Opérateurs et fonctions
Les quatre opérations
Les opérateurs d'incrémentation ou décrémentation
L'opérateur d'affectation
Conversions et opérateurs
Autres opérateurs
Trois nuances d'objets-fonctions
Héritage
Classes abstraites...
...Classes concrêtes
Accès aux données: la section protected
Constructeurs...
Le constructeur de copie
Autres constructeurs
...et destructeurs
Le polymorphisme
Classes de bases abstraites
Constructeurs virtuels...
...et destructeurs virtuels
Appel de fonctions virtuelles depuis le constructeur ou le destructeur
L'opérateur d'affectation dans une classe de base
Le clônage polymorphique
L'héritage multiple
Implémentation du "pattern" observateur en utilisant l'héritage multiple
Modèles ("templates")
Modèles de fonctions
Classes paramétrées
Définition
Instantiation
Paramètres utilisables
Spécialisation
Quelques conseils
Exceptions
Que faire en cas d'erreur ?
Une analogie avec la vie courante
Le système d'exceptions
Les hiérarchies d'objets exceptions
La déclaration de fonction
La génération d'exception
La capture des exceptions
Exceptions non capturées
Exceptions et ...
...constructeurs
...destructeurs
Gestion des ressources: mémoire, fichiers,...
Qu'est-ce que l'allocation dynamique de mémoire?
Pointeurs empilés, objets entassés
Objets perdus et fuites de mémoire
Les pointeurs qui pendouillent
Propriétaires et référents
Opérateurs et fonctions
Les opérateurs
new
et
delete
Les opérateurs
new[]
et
delete[]
Fonctions malloc, free, realloc
En cas d'erreur d'allocation
Objets utilisés pour la gestion de la mémoire
Objets utilisés pour la gestion des fichiers
Objets gestionnaires de ressources
Produire du code robuste
La bibliothèque standard
Compléments sur le langage
Les espaces de noms
Les types locaux
L'instruction
typename
Les conteneurs
Conteneurs d'objets ou conteneurs de pointeurs ?
Conteneurs séquentiels et conteneurs associatifs (ordonnés)
Les conteneurs de la bibliothèque standard
Types définis sur les conteneurs
Quelques fonctions-membres ou opérateurs
string: les chaînes de caractères
Les itérateurs
Itérateurs valides et invalides
Les différentes catégories d'itérateurs
Spécifier un intervalle à l'aide de deux itérateurs
Qui fait quoi ?
Algorithmes
Trier un conteneur
Manipuler des listes
Les entrées-sorties
Les objets de type ostream ou istream
Lecture-écriture en binaire
Fonctions get, put, getline
Entrées-sorties formattées: << et >>
Le contrôle du format
Ecrire... ou lire l'état du flot
Surcharger l'opérateur <<
Surcharger l'opérateur >>
Les itérateurs de flots
Remplir un conteneur à partir d'un fichier
Références et autres liens
Exercices
Emmanuel Courcelle <emmanuel.courcelle@inp-toulouse.fr>