Une classe a 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 constituée des membres public
, tandis que la seconde est composée des membres public
et protected
. Il y a des opérations et des données qui permettent à une sous-classe d'accéder au fait que les utilisateurs ordinaires n'y ont pas accès. En guise d'exemple concret, imaginez une bibliothèque de classes Windows GUI. Il enveloppe et cache l'ancienne API Windows. Un Window
représente une fenêtre et possède un HWND
qui est le handle de fenêtre Windows sous-jacent. Il cache le HWND
aux utilisateurs de la classe Window
, car ce n'est pas leur affaire (ou s'il est correct pour eux de l'utiliser, il l'expose uniquement via un accesseur en lecture seule). Mais il est bon pour les sous-classes de Window
, comme FrameWindow
ou EditControl
, pour accéder au HWND
directement:
class Window
{
public:
void Show(); // Example public API
protected:
HWND m_hwnd;
};
Vous pouvez être mal à votre question en demandant quand il est vraiment nécessaire * *. L'ensemble du langage C++ n'est pas * vraiment nécessaire *. Demandez-vous quand c'est utile? –
Je pense que je prendrais du recul. Quand/si vous utilisez l'héritage, l'utilisation de protected semble assez évidente (du moins pour moi). OMI, la vraie question est: "Quelles sont les utilisations pratiques de l'héritage en C++?" –
@JerryCoffin si c'est vraiment évident, où et quand ne puis-je remplacer «protégé» par «privé» ou «public»? (dépend d'une situation) – mechanic