Utilisateur anonyme
Détails
Différence entre héritage privé, public et protégé
Quelle est la différence entre les héritages "public", "privé" et "protégé" en C++ ? Toutes les questions que j'ai trouvées sur SO traitent de cas spécifiques.
947
3
Pour répondre à cette question, j'aimerais d'abord décrire les accesseurs de Member avec mes propres mots. Si vous le savez déjà, passez directement à la rubrique "suivant :".
Il y a trois accesseurs que je connais :
public
,protégé
etprivé
.Laissez :
Base
est aussi conscient queBase
contientpublicMember
.Base
contientprotectedMember
.Base
n'est au courant deprivateMember
.Par "est conscient de", j'entends "reconnaît l'existence de, et donc peut accéder à".
suivant :
Il en va de même pour l'héritage public, privé et protégé. Considérons une classe
Base
et une classeChild
qui hérite deBase
.Il s'agit de la façon dont les membres publics de la classe de base sont exposés dans la classe dérivée.
Comme le souligne litb, l'héritage public est l'héritage traditionnel que vous verrez dans la plupart des langages de programmation. C'est-à-dire qu'il modélise une relation "IS-A". L'héritage privé, quelque chose d'AFAIK propre au C++, est une relation "MISE EN ŒUVRE EN TERMES DE". C'est-à-dire que vous voulez utiliser l'interface publique dans la classe dérivée, mais vous ne voulez pas que l'utilisateur de la classe dérivée ait accès à cette interface. Beaucoup soutiennent que dans ce cas, vous devriez agréger la classe de base, c'est-à-dire qu'au lieu d'avoir la classe de base comme une base privée, faites-en un membre de la classe dérivée afin de réutiliser la fonctionnalité de la classe de base.
Il s'agit essentiellement de la protection de l'accès des membres publics et protégés de la classe de base dans la classe dérivée. Avec l'héritage public, la classe dérivée peut voir les membres publics et protégés de la classe de base. Avec l'héritage privé, elle ne le peut pas. Avec l'héritage protected, la classe dérivée et toutes les classes dérivées de celle-ci peuvent les voir.