Dans la section précédente, nous avons vu la méthode de définition des classes dérivées, utilisant l'héritage public. Il existe en fait trois méthodes ici, à savoir l'héritage public , l'héritage privé et l'héritage protégé .
La principale différence entre les différentes méthodes d'héritage réside dans les modifications des droits d'accès des membres ayant des droits d'accès différents dans la classe de base dans la classe dérivée. Présentés un par un ci-dessous.
1. Héritage public :
En mode héritage public, ses caractéristiques sont les suivantes :
(1) Les membres publics de la classe de base sont toujours des membres publics de la classe dérivée. Bien entendu, les fonctions membres et les objets de classe dérivée de la classe dérivée sont accessibles.
(2) Les membres privés de la classe de base ne sont pas accessibles aux membres de la classe dérivée ou aux objets de la classe dérivée.
(3) Les membres protégés de la classe de base sont toujours des types protégés dans la classe dérivée et sont accessibles via les fonctions membres de la classe dérivée, mais les objets de la classe dérivée ne sont pas accessibles.
2. Héritage privé :
Dans le cas d'un héritage privé, les droits d'accès des trois membres de type public, de type privé et de type protégé sont les suivants :
(1) Les types publics et protégés de la classe de base, après avoir été absorbés par l'héritage privé de la classe dérivée, deviennent les types privés de la classe dérivée, c'est-à-dire qu'ils sont accessibles dans les fonctions membres de la classe et ne peuvent pas être consulté en dehors du cours.
(2) Les membres privés de la classe de base ne sont pas accessibles dans la classe dérivée, que ce soit à l'intérieur ou à l'extérieur de la classe.
On voit que s'il s'agit d'une dérivation privée, les membres privés de la classe de base ne peuvent plus être utilisés dans la classe dérivée ni même dans la sous-classe dérivée, et n'ont aucune signification, donc ce type d'utilisation est relativement rare.
3. Protéger l’héritage :
L'héritage de type protégé présente les caractéristiques suivantes :
(1) Les membres publics et les membres de type protégé de la classe de base sont des membres protégés de la classe dérivée.
(2) Les membres privés de la classe de base ne sont pas directement accessibles dans la classe dérivée.
On peut voir que les fonctions membres de la classe dérivée peuvent accéder aux membres publics et aux membres protégés de la classe de base, mais elles ne sont pas accessibles en dehors de la classe via l'objet de classe dérivée. De même, les membres privés de la classe de base ne sont pas accessibles via les fonctions membres de la classe dérivée ou via des objets de classe.
Ce qui suit prend toujours le code de programme de l'horloge et du réveil comme exemple pour expérimenter différents types de problèmes d'accès dérivés de différentes autorisations dans la classe de base. Pour les types publics, ils peuvent être appelés dans les méthodes membres des classes dérivées ou en dehors de la classe. La compilation s'exécute sans erreur comme suit :
Mais pour les membres privés, nous essayons d'ajouter une ligne de code voir ligne 41. Dans la fonction membre de la classe dérivée, la variable H absorbée de la classe de base est affectée et une erreur est signalée lors de la compilation. Voir l'encadré rouge et l'invite ci-dessous :
Vous pouvez voir le message d'erreur "H est un type privé".
Pour les types protégés, nous essayons de définir une variable de type protégée w dans la classe de base, et essayons de l'attribuer et de l'utiliser dans la méthode de classe dérivée héritée publiquement. Vous pouvez voir la situation dans l'image ci-dessous, qui est entièrement accessible. Comme indiqué ci-dessous :
Pour l'héritage privé, les membres des types publics sont accessibles en dehors de la classe :
Vous pouvez expérimenter par vous-même pour vérifier l'accès de différents types de membres dans le cadre de l'héritage public.
Après étude et expérimentation, nous pouvons résumer ainsi :
1. Les membres privés de la classe de base ne sont pas accessibles aux fonctions membres au sein de la classe dérivée ou en dehors de la classe, quelles que soient les autorisations dérivées.
2. L'héritage privé, quel que soit le type d'origine de la classe de base, n'est pas accessible via les fonctions membres en dehors de la classe dérivée.
3. Les droits d'accès des membres absorbés par la classe dérivée de la classe de base sont les plus bas des droits d'accès dans la classe de base et des droits dérivés au moment de la dérivation.
Et en fonction de la combinaison des autorisations dérivées, des autorisations définies dans la classe de base et des différents temps d'accès au sein de la classe dérivée et en dehors de la classe, le tableau suivant est répertorié :
héritage public | héritage protégé | héritage privé | ||||
Lieu de visite | en classe | Hors classe | en classe | Hors classe | en classe | Hors classe |
membres du public | Peut | Peut | Peut | Ne peut pas | Peut | Ne peut pas |
protéger les membres | Peut | Ne peut pas | Peut | Ne peut pas | Peut | Ne peut pas |
membre privé | Ne peut pas | Ne peut pas | Ne peut pas | Ne peut pas | Ne peut pas | Ne peut pas |