Lexique
En construction
Cette page est en construction. N’hésitez pas à suggérer des ajouts ou signaler ce qui vous semble faux ou étrange.
Classe
- Classe abstraite: classe qui contient au moins une fonction-membre virtuelle pure; elle n’est donc pas instanciable.
- Classe concrète: classe qui n’est pas abstraite.
- Classe instanciable: classe dont on peut construire des instances, c’est-à-dire qui n’est donc pas abstraite et qui possède au moins un constructeur publique.
- Classe copiable: classe qui possède un constructeur de copie (publique).
- Classe déplaçable: classe qui possède un constructeur de déplacement (publique).
- Classe default-constructible: classe qui possède un constructeur par défaut (publique).
- Classe stable en mémoire: classe dont les données ne risquent pas de changement d’adresse mémoire.
- Classe polymorphe: fonction qui déclare ou hérite d’au moins une fonction virtuelle.
Vie d’un objet
- Allocation d’un objet: réservation d’un segment de mémoire de la taille de l’objet
, mais on ne l’utilisera pas.mallocpermet d’allouer de la mémoire
- Construction d’un objet: appel d’un des constructeurs de la classe, ce qui va commencer par appeler un constructeur pour chacun des attributs.
- Instanciation d’un objet: allocation+construction
- Le mot-clef
newpermet d’instancier un objet sur le tas.
- Le mot-clef
- Désallocation d’un objet: réservation d’un segment de mémoire
, mais on ne l’utilisera pas.freepermet desallouer de la mémoire
- Destruction d’un objet: appel du destructeur de la classe, suite à quoi le destructeur des attributs qui ne sont pas des références sera appelé.
- Par définition, la destruction d’un objet provoque la destruction des objets owned.
- La destruction d’un pointeur brut ne provoque pas la destruction
- Désinstanciation d’un objet:destruction+désallocation
- Le mot-clef
deletepermet de désinstancier un objet sur le tas.
- Le mot-clef
- Copie d’un objet: construction d’un nouvel objet en copiant le contenu d’un autre objet.
- Déplacement d’un objet: construction d’un nouvel objet en déplaçant le contenu d’un autre objet dans le nouvel objet. On peut souvent forcer le déplacement d’un objet avec
std::move. - Affectation d’un objet (assignment): remplir le contenu d’un objet
dà partir celui d’un autre objetg(en général du même type) grâce à un l’operateur d’affectation (operator=).gest à gauche du signe=etdest à droite. L’affectation peut soit copier le contenu deddansg(affectation par copie) ou déplacer le contenu deddansg(affectation par déplacement).
Fonctions
- Fonction libre: fonction qui n’est pas dans une classe.
- Fonction-membre ou méthode: fonction dans une classe.
- Fonction-membre virtuelle: fonction-membre qui peut-être redéfinie dans une classe dérivée. Dès lors qu’une fonction est virtuelle, la résolution d’appel est dynamique.
- Fonction-membre virtuelle pure: fonction-membre virtuelle qui n’a pas d’implémentation du tout. Usuellement, on l’implémente dans les classe filles.
- Prototype d’une fonction ou fonction-membre: informations données au compilateur lors de la déclaration d’une fonction.
- Signature d’une fonction ou fonction-membre: la partie du prototype qui est prise en compte pour la surcharge. Notamment le type de retour ne fait pas partie de la signature mais les qualificatifs (le
constéventuel à droite d’une fonction-membre) en fait partie. On peut pas avoir deux fonctions ou fonctions avec la même signature. - Corps d’une fonction: partie de la fonction entre
{}. - Déclaration d’une fonction: indication au compilateur de l’existence d’une fonction et de son prototype, sans corps. On peut déclarer plusieurs fois une fonction.
- Définition d’une fonction: écriture du corps de la fonction. On ne peut pas définir deux fois une fonction. On peut définir et déclarer une fonction en même temps, mais pour les fonction-membres ce doit être dans la déclaration de la classe.
Statique vs Dynamique
| Statique = au moment de la compilation | Dynamique = seulement au moment de l’exécution |
|---|---|
| Type statique: type d’une variable tel que déclaré dans le code ou d’une expression telle que calculé par le compilateur. | Type dynamique: type réel d’un objet à l’éxecution. Ne peut pas toujours être connu au moment de la compilation. |
| Appel statique: la fonction appelée est choisie au moment de la compilation. Il y a un choix en cas de surcharge. La résolution d’un appel statique se fait à partir des types statiques des paramètres. | Appel dynamique: la fonction appelée n’est pas connue au moment de la compilation. Il s’agit toujours de l’appel à une fonction-membre virtuelle fct(..) sur un objet o. La résolution d’un appel dynamique se fait à partir du type dynamique de o. |
| Allocation sur la pile. Les variables locales sont allouées sur la pile et la taille pour stocker leur type doit donc être connue par le compilateur. | Allocation sur la tas ou allocation dynamique. Allocation via new malloc )std::vector<MaClasse> alloue des MaClasse sur le tas). La taille du segment allouée peut être spécifié à l’exécution. |
Avertissement
Le mot-clef static ne correspond pas entièrement à l’utilisation de l’adjectif statique.
Il fait référence à la zone mémoire static qui fait partie du code compilé (et qui n’est ni sur la pile ni sur le tas).
La taille de la zone mémoire static est déterminée au moment de la compilation.
Types
- Type fondamentaux: booléens (
bool), les types de caractères (char, unsignedchar, etc), les types d’entiers (int,unsigned,uint16, etc), et les types de nombres flottants (float,double, etc).size_test un alias vers un type d’entiers signé, donc un type fondamental.
- Liste ou Liste chainée ou liste doublement chainée: instance de
std::list - Tableau dynamique ou vecteur ou parfois simplement tableau: instance de
std::vector - Tableau statique: instance de
std::array - Ensemble: instance de
std::set(tree-set) oustd::unordered_set(hash-set). - Dictionnaire: instance de
std::map(tree-map) oustd::unordered_map(hash-map). - Tuple: instance de type
std::tuple - Pointeur brut ou pointeur nu (raw pointer): un pointeur “normal” comme en C, c’est-à-dire dont le type est
un_type*. - Unique-pointeur (unique pointer): une instance de
std::unique_ptr<...>. - Pointeur nul: le pointeur brut ou le unique-pointeur indiquant qu’aucun objet n’est pointé.
- Déréfencer un pointeur: suivre un pointeur (typiquement si
ptrest un pointeur*ptrdéréférence ce pointeur). - Référence: alias vers un segment mémoire, c’est-à-dire dont le type est
un_type&.- Référence constante: référence qui pointe vers un type qualifiée avec
const, c’est-à-dire dont le type estconst un_type&ouun_type const&.
- Référence constante: référence qui pointe vers un type qualifiée avec
- Qualificatif (qualifier): Les types et prototype de fonctions peuvent contenir des qualificatifs. Dans ce cours, on ne verra que le qualificatif
const. Les qualificatifs font partie du type et le qualificatif d’une fonction-membre fait partie de sa signature.