Xavier Lamorlette
Sommaire :
explicit
inline
static
constexpr
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.
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.
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 : 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.
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.
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 :
Substitution Failure Is Not An Error : le code invalide généré par la substitution de paramêtres templates n'est pas une erreur.
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.