Une classe possède deux API : une pour le code qui l'instancie et utilise les objets résultants, et une pour les sous-classes.
La première API est l public
tandis que le second est le public
et protected
membres. Il existe des opérations et des données auxquelles une sous-classe peut accéder, mais auxquelles les "utilisateurs ordinaires" ne peuvent pas accéder.
À titre d'exemple concret, imaginez une bibliothèque de classes d'interface graphique Windows. Elle enveloppe et cache la bonne vieille API Windows. A Window
représente une fenêtre, et a un HWND
qui est la poignée de fenêtre Windows sous-jacente. Il cache le HWND
de la part des utilisateurs de la Window
parce que cela ne les regarde pas (ou si elles peuvent l'utiliser, elle ne l'expose que par un accesseur en lecture seule). Mais c'est OK pour les sous-classes de Window
comme FrameWindow
o EditControl
pour accéder à la HWND
directement :
class Window
{
public:
void Show(); // Example public API
protected:
HWND m_hwnd;
};