Xavier Lamorlette

C++ : Généralités

Sommaire :

Vocabulaire

Polymorphisme / Polymorphism

Le polymorphisme est le partage d'une même interface entre différents types.

En C++, par polymorphisme, ou sous-entend généralement polymorphisme dynamique via les méthodes virtuelles. Lorsqu'une méthode virtuelle est appelée, son implémentation est choisie à l'exécution en fonction du type réel de l'objet. L'appel n'est résolu qu'à l'exécution car le type de l'objet n'est, a priori, pas connu à la compilation.

Le polymorphisme statique est obtenu par le mixin.

Surcharge / Overload

La surcharge est la définition aditionnelle d'une méthode, fonction ou opérateur avec de nouveaux types de données. Cette logique peut être entièrement calculée à la compilation. C'est une forme de polymorphisme statique.

Dérogation / Overriding

Une classe fille peut définir une implémentation spécifique d'une méthode définit par une de ses classes mères. C'est ce qui permet le polymorphisme dynamique.

ODR

ODR : One Definition Rule : dans une translation unit et dans le programme, un « objet » peut être déclaré plusieurs fois mais ne peut être défini qu'une seule fois.

Les types et templates peuvent être définis dans plusieurs translation units.

Objet fonction / Function object

Un objet fonction, ou functor, est une instance d'une classe implémentant l'opérateur d'appel operator().

L'opérateur d'appel operator() peut être surchargé avec différents types de paramêtres.

Les fonctions lambdas sont des objets fonctions.

Effacement de type / Type erasure

L'effacement de type est l'utilisation d'une interface générique à la place de classes concrètes :

Le contraire de l'effacement de type est :

SFINAE

Substitution Failure Is Not An Error : le code invalide généré par la substitution de paramêtres templates n'est pas une erreur.

Éléments du langage

explicit

C'est un déterminant (“specifier”) qui interdit les conversions implicites utilisant les constructeurs à un paramètre (ou dont tous les paramètres, sauf le premier ont des valeurs par défaut).

class A {
  public:
    explicit A(int);
};

explicit peut être appliqué aux opérateurs de conversion (ex : operator bool()).

inline

Permet à une fonction d'être définie dans plusieurs unités de compilation.
L'éditeur de lien choisit une des instances (qui doivent être identiques).

static

En dehors d'une classe, indique que le symbole n'est visible que dans son objet.
C'est le contraire de extern, qui est implicite.
Il vaut mieux utiliser le namespace anonyme.

constexpr

Une fonction constexpr peut être exécutée par le compilateur, qui contient un interpréteur pour un sous-ensemble du C++.


À étudier :

La dernière mise à jour de cette page date de mars 2022.

Le contenu de ce site est, en tant qu'œuvre originale de l'esprit, protégé par le droit d'auteur.
Pour tout commentaire, vous pouvez m'écrire à xavier.lamorlette@gmail.com.