L'héritage protégé permet-il à la classe dérivée d'accéder aux membres privés de sa classe de base?
Je suis vraiment confus au sujet de privé de l'héritage et protégé de l'héritage.
1) dans les aires protégées de l'héritage, le public et les membres de devenir des membres protégés de la classe dérivée. Dans le privée, héritage, tout est privé. Cependant, la classe dérivée ne peut jamais accéder aux membres privés de la classe de base, est ce que le droit? La classe dérivée peut accès du public et des membres protégés dans les deux cas. Est ce que le droit?
2) j'ai remarqué que les membres privés de la classe de base ne sera jamais touché par la classe dérivée. Alors, pourquoi le privé, les membres hérités?
source d'informationauteur skydoor
Vous devez vous connecter pour publier un commentaire.
Vous avez raison sur le point #1. La spécification de
private
protected
oupublic
lors de l'héritage d'une classe de base ne change rien d'accès-sage de la classe dérivée elle-même. Ces spécificateurs d'accès indiquer au compilateur comment traiter la de base des membres de classe lorsque des instances de la classe dérivée sont utilisés ailleurs, ou si la classe dérivée arrive à être utilisée comme classe de base pour d'autres classes.Mise à JOUR: suivantes peuvent vous aider à illustrer les différences:
Pour les classes dérivées à partir de la base:
Pour les classes dérivées à partir de la 3 classes dérivées:
L'accès externe à la première des trois classes dérivées:
1a), à l'abri de l'héritage signifie "enfant" peut accéder à tout ce qu'il pouvait dans le patrimoine public, mais d'autres à l'aide de cet objet ne peut voir l'interface publique pour l'enfant, rien dans son parent est caché.
1b) Privé de l'héritage des résultats dans toutes les fonctions publiques d'une classe héritée comme les fonctions privées - ce qui signifie qu'ils ne peuvent pas être appelés à partir de l'enfant ou accessibles à partir d'un client de votre objet.
2) Les membres sont hérités parce que les méthodes de la classe de base pourrait en ont besoin pour fonctionner sur.
Oui, c'est exact. Les classes dérivées peuvent accéder protégées et les membres publics de sa classe de base et la classe dérivée ne peut pas accéder aux membres privés de la classe de base.
Les membres privés sont héritées pour la raison suivante: La classe de base peut définir un protégé ou de la fonction publique qui modifie la classe de base du membre privé. La classe dérivée peut appeler cette fonction, et a donc besoin de savoir à propos de la variable privée qu'il est accéder aux.
Oui.
Oui.
Parce qu'ils font partie de la classe de base, et vous avez besoin de la classe de base qui est une partie de votre classe dérivée. Remarque, vous pouvez toujours manipuler de l'état (le cas échéant) maintenu dans la classe de base à l'aide de non-remplacé
public
/protected
des fonctions de membre du.1) Vous avez raison. Aucun type d'héritage permet d'accéder aux membres privés (seulement
friend
déclarations de permettre que l')2) Ils ont "hérité" dans le sens où un objet de type Dérivé, lorsqu'il est stocké dans la mémoire, inclut toutes les données membres de la Dérivée et de Base, y compris les membres privés de la Base. Les membres privés ne pouvez pas simplement aller loin depuis quand les méthodes de référence sur cet objet, ils doivent accéder à la Base de membres privés.
Aussi, les noms des membres privés de la Base sont techniquement à la portée de Dérivées de méthodes, mais bien sûr, vous obtiendrez une erreur de compilation si vous essayez d'y accéder.