343 votes

Les membres privés et protégés : C++

Quelqu'un peut-il m’éclairer quant à la différence entre les membres privés et protégés dans les classes ? Si je comprends bien meilleures conventions pratique variables et fonctions qui ne sont pas appelées à l’extérieur de la classe doivent être rendues privées - mais en regardant mon projet MFC, MFC semble favoriser protégé.

Quelle est la différence et qui devrait utiliser ?

Merci.

446voto

Firas Assaad Points 10339

Les membres privés ne sont accessibles qu'à l'intérieur de la classe définissant eux.

Membres protégés sont accessibles dans la classe qui les définit et dans les classes qui héritent de cette classe.

Edit: les Deux sont également accessibles par des amis de sa classe, et, dans le cas de membres protégés, par les amis de leurs classes dérivées.

Edit 2: Utiliser tout ce qui fait sens dans le contexte de votre problème. Vous devriez essayer de faire les membres privés à chaque fois que vous pouvez pour réduire le couplage et de protéger la mise en œuvre de la classe de base, mais si ce n'est pas possible d'utiliser ensuite des membres protégés. Case C++ FAQ Lite pour une meilleure compréhension de la question. Cette question sur les variables protégés peut aussi aider.

155voto

paercebal Points 38526

Public membres d'une classe sont accessibles pour tous et chacun.

Protégé les membres de la classe ne sont pas accessibles à l'extérieur d'Un code, mais est accessible à partir du code d'une classe dérivée de A.

Privé des membres de la classe ne sont pas accessibles à l'extérieur d'Un code, ou à partir du code d'une classe dérivée de A.

Donc, en fin de compte, le choix entre protégée ou privée est de répondre aux questions suivantes: Combien de confiance sont-vous prêt à mettre dans le programmeur de la classe dérivée?

Par défaut, supposons que la classe dérivée n'est pas digne de confiance, et faire de votre privée des membres. Si vous avez une très bonne raison de donner libre accès de la mère de la classe de fonctionnement interne de ses classes dérivées, alors vous pouvez faire de leur protection.

79voto

Roddy Points 32503

Membres protégés sont accessibles à partir de classes dérivées. Forêts privées ne peuvent pas.

En ce qui concerne les « meilleures pratiques », ça dépend. Si il y a même une faible possibilité que quelqu'un pourrait vouloir dériver une nouvelle classe de ton existantes et ont besoin d’accéder aux membres internes, les rendre protégé, non privées. Si elles sont privées, votre classe peut-être devenir difficile à hériter de facilement.

25voto

Toon Krijthe Points 36327

La raison pour laquelle MFC favorise protégée, est parce que c’est un cadre. Vous voudrez probablement sous-classe les classes MFC et dans ce cas une interface protégée est nécessaire pour accéder aux méthodes qui ne sont pas visibles à usage général de la classe.

10voto

Mats Fredriksson Points 7136

Tout dépend de ce que vous voulez faire et ce que vous voulez que les classes dérivées pour pouvoir le voir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X