Xavier Lamorlette

C++ : Généralités

Vocabulaire

Polymorphisme / Polymorphism

Lorsqu'une méthode virtuelle est appelée, l'implémentation de la méthode exécutée est choisie en fonction du type réel de l'objet. L'appel n'est donc résolu qu'à l'exécution, le type de l'objet ne pouvant pas - a priori - être connu à la compilation.

Surcharge / Overload

Aussi appelé « polymorphisme statique ». 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.

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().

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++.

Spécialisation de template

template<typename T>
class Template {
   void foo(T param) {
   }
};

template<>
class Template<int> {
   void foo(int param) {
   }
};


La dernière mise à jour de cette page date de juin 2019.

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.