Visibilité de classe de base |
Trois formes d'héritage | ||
---|---|---|---|
public | protected | private | |
public | public | protected | private |
protected | protected | protected | private |
private | non-accessible | non-accessible | non-accessible |
Exemple :
Par défaut, en C++, l'appel aux méthodes se détermine de façon statique lors de l'édition des liens. Cette approche ne permet pas le polymorphisme.
Exemple 1Il est possible de forcer le polymorphisme via la création d'une table virtuelle en utilisant le mot-clé virtual.
L'adresse des méthodes virtuelles auxquelles pointent les pointeurs dans la table virtuelles change selon la classe d'appartenance de l'objet.
Les diagrammes suivants offrent une représentation visuelle du comportement des classes contenues dans les espaces nom faune1 et faune2.
L'héritage multiple est à éviter sauf pour ce qui est des interfaces (en général, des classes abstraites pures).
Une classe abstraite pure équivaut à une interface. Aucune variable d'instance n'est créée, donc il n'y a pas de copies multiples.
Exemple 1L'exemple suivant utilise la surcharge de fonctions pour permettre l'appel de la méthode appropriée au type de l'objet passé en paramètre.
L'exemple suivant utilise le RTTI (Run-Time Type Identification) pour déterminer le type d'un objet passé et appelé la bonne méthode.