Spécificateurs d'accès C ++

Spécificateurs d'accès C ++
En C ++, une classe est un ensemble de variables et de fonctions qui ont été configurées pour fonctionner ensemble. Lorsque les variables de la classe sont données, un objet est obtenu. Un objet a les mêmes variables et fonctions qu'une classe, mais cette fois, les variables ont des valeurs. De nombreux objets peuvent être créés à partir d'une seule classe. Un objet diffère d'un autre objet selon les différents ensembles de valeurs attribuées aux variables de l'autre objet. La création d'un objet à partir d'une classe est censée instanier l'objet. Même si deux objets différents ont les mêmes valeurs pour leurs variables, ces objets sont des entités différentes, identifiées par des noms différents du programme. Les variables pour un objet et sa classe correspondante sont appelées membres de données. Les fonctions d'un objet et de sa classe correspondante sont appelées fonctions membres. Les membres de données et les fonctions des membres sont appelés membres.

Le mot accès signifie lire ou modifier la valeur d'une variable, et il signifie également utiliser une fonction. Les spécificateurs d'accès C ++ sont les mots, «privé», «protégé» et «public."Ils décident si un membre peut accéder à d'autres membres de sa classe, ou si une fonction ou un opérateur en dehors de la classe et non appartenant à la classe peut accéder à n'importe quel membre de la classe. Ils décident également si un membre d'un cours (enfant) dérivé peut accéder à un membre d'une classe parentale.

La connaissance de base de C ++ est nécessaire pour comprendre cet article et tester le code fourni.

Contenu de l'article

  • Les spécificateurs publics et privés
  • Le spécificateur protégé
  • Spécificateurs de classe dérivés et spécificateurs de membres
  • Conclusion

Les spécificateurs publics et privés

Classe
Tout membre d'une classe peut accéder à tout autre membre de cette même classe, dont l'indépendance est étiquetée «public» ou «privé.»Considérez le programme suivant:

#inclure
Utilisation de Namespace Std;
classe TheCla

privé:
int num1;
int num2;
public:
Thecla (int n1, int n2)

num1 = n1; num2 = n2;

Int méthode ()

retour num1;

;
int main()

Thecla obj (10, 20);
int no2 = obj.méthode();
couter<// int no1 = obj.num1;
retour 0;

La sortie est 10. Les membres privés sont num1 et num2. Les membres publics sont thecla () et méthode (). Notez que thecla () est la fonction du constructeur qui initialise les variables d'intérêt. La région d'un spécificateur d'accès commence de son étiquette à la fin de la description de la classe (définition) ou au début d'un autre spécificateur d'accès.

Dans la fonction Main (), la première instruction est l'instanciation impliquant la fonction du constructeur, qui initialise num1 et num2. La déclaration suivante appelle le membre public, Method (), de la classe.

Maintenant, dans la description de la classe (définition), la fonction du membre public, thecla (), accède aux membres privés, num1 et num2. De plus, la fonction du membre public, Method (), accède au membre privé, num1. Tout membre d'une description de classe peut accéder à tout autre membre dans la même description de classe; Peu importe quel membre est privé ou public.

Cependant, une fonction ou un opérateur non déclaré dans la description de la classe et en dehors de la description de la classe ne peut accéder uniquement aux membres publics de la classe. La fonction Main (), par exemple, est une fonction déclarée en dehors de la description de la classe. Il a pu accéder uniquement à la méthode () et aux membres du public Thecla (). À l'intérieur de la fonction principale (), la fonction thecla () est obj (10, 20).

Une fonction extérieure ou un opérateur extérieur, comme la fonction principale (), ne peut accéder à aucun des membres privés de la classe, tels que num1 ou num2. Supprimez l'indicateur de commentaire, //, de la dernière déclaration de l'autre dans Main (). Si vous essayez de compiler le programme, notez que le programme ne se compile pas, donnant un message d'erreur.

Spécificateur par défaut
Le spécificateur par défaut pour une classe est «privé.»Ainsi, la description de classe ci-dessus est la même que la description suivante, privée, mais sans le spécificateur:

classe TheCla

int num1;
int num2;
public:
Thecla (int n1, int n2)

num1 = n1; num2 = n2;

Int méthode ()

retour num1;

;

Note: l'étiquette de spécificateur d'accès commence par le spécificateur, puis est suivie d'un côlon.

Le spécificateur protégé

Dans une description de classe, et à partir d'une fonction extérieure ou d'un opérateur extérieur, le spécificateur protégé est le même que le spécificateur privé. Maintenant, remplacez le spécificateur privé dans le programme ci-dessus par le spécificateur, protégez et supprimez l'indicateur de commentaire, //, de la dernière instruction de la fonction principale (). Si vous essayez de compiler le programme, notez que le programme ne se compile pas, donnant un message d'erreur.

La question du spécificateur protégé survient lorsque les membres de la classe dérivée (héritée) doivent accéder aux membres de la classe de base (parent).

Classe dérivée du public avec les membres publics
Considérez le programme suivant:

#inclure
Utilisation de Namespace Std;
classe TheCla

public:
int num1 = 10;
protégé:
int num2 = 20;
privé:
int num3 = 30;
;
classe Class Childcla: Public Thecla

public:
INT Method1 ()

retour num1;

int méthode 2 ()

retour num2;

/ * int méthode3 ()

retour num3;
* /
;
int main()

Childcla Childobj;
int no1 = childobj.méthode1 ();
couter<int no2 = childobj.Method2 ();
couter<retour 0;

La sortie est:

dix
20

Dans la classe de base, Num1 est public, num2 est protégé et num3 est privé. Dans la classe dérivée, toutes les fonctions membres sont publiques. La première fonction, Method1 (), accède au membre des données publiques, num1. La deuxième fonction, Method2 (), accède au membre de données protégé, num2. La troisième fonction, Method3 (), bien que actuellement commentée, devrait accéder au membre de données privé, num3.

Une classe dérivée n'est pas déclarée sans spécificateur d'accès (public, protégé ou privé). Ci-dessus, la classe dérivée est déclarée avec le spécificateur public, c'est-à-dire:

classe ChildCla: public thecla

Maintenant non comment la définition de la fonction du troisième membre dans la classe dérivée. Si vous essayez de compiler le programme, notez qu'il ne compile pas, donnant un message d'erreur.

Note: Lorsque la classe dérivée est déclarée publique, ses membres ne peuvent pas accéder aux membres privés de la classe de base. Ses membres peuvent cependant accéder aux membres publics et protégés de la classe de base. Le programme ci-dessus illustre ceci.

Cependant, notez qu'un membre public de la classe publique dérivée peut accéder à un membre protégé de la classe de base.

Spécificateurs de classe dérivés et spécificateurs de membres

Classe dérivée protégée avec des membres publics
Remplacez le spécificateur «public» par «protégé» dans la déclaration de la classe dérivée ci-dessus, comme suit:

classe ChildCla: protégé TheCla

Compiler et exécuter le programme et noter que le résultat est le même qu'avant.

Ainsi, lorsque toute la classe dérivée est déclarée protégée, ses membres ne peuvent pas accéder aux membres privés de la classe de base. Ses membres peuvent cependant accéder aux membres publics et protégés de la classe de base. C'est la même chose que lorsque la classe dérivée est déclarée publique.

Note: un membre protégé de la classe publique dérivée peut accéder à un membre protégé de la classe de base.

Classe dérivée privée avec des membres publics
Remplacez le spécificateur «protégé» par «privé» dans la déclaration de la classe dérivée ci-dessus, comme suit:

classe Childcla: private thecla

Compiler et exécuter le programme et noter que le résultat est le même qu'avant.

Ainsi, lorsque toute la classe dérivée est déclarée privée, ses membres ne peuvent pas accéder aux membres privés de la classe de base. Ses membres peuvent cependant accéder aux membres publics et protégés de la classe de base. C'est la même chose que lorsque la classe dérivée est déclarée protégée ou publique.

Classe dérivée publique avec des membres protégés
Tapez, compilez et exécutez le programme suivant, dans lequel la classe dérivée entière est protégée, et ses membres sont également protégés. Certains segments de code sont les suivants:

#inclure
Utilisation de Namespace Std;
classe TheCla

public:
int num1 = 10;
protégé:
int num2 = 20;
privé:
int num3 = 30;
;
classe Class Childcla: Public Thecla

protégé:
INT Method1 ()

retour num1;

int méthode 2 ()

retour num2;

/ * int méthode3 ()

retour num3;
* /
;
int main()

/ * Childcla Childobj;
int no1 = childobj.méthode1 ();
couter</ * int no2 = childobj.Method2 ();
couter<retour 0;

Le programme fonctionne tel qu'il est. Il n'y a pas de sortie, et il n'est pas censé y avoir de sortie, en fonction de la façon dont le programme a été tapé.

Maintenant, sans vente la définition de la fonction, Method3 (), dans la classe dérivée. Si vous essayez de compiler le programme, notez qu'il ne compile pas, donnant un message d'erreur. Cela signifie qu'un membre privé ne peut pas être accessible à partir d'une fonction extérieure, d'un opérateur extérieur ou d'une classe dérivée. C'est la même conclusion que celle terminée ci-dessus, concernant l'accès à un membre privé.

Note: un membre protégé de la classe dérivée protégée peut accéder à un membre protégé de la classe de base.

Maintenant, remettez les commentaires dans la classe dérivée et non le premier segment de code dans la fonction principale (). Si vous essayez de compiler le programme, notez que le programme ne se compilera pas en raison du premier segment de code dans la fonction principale (). Cet effet n'est pas nouveau. Outre la classe dérivée, les fonctions extérieures et les opérateurs extérieurs, les membres protégés et privés d'une classe (base ou dérivée) sont du même spécificateur, privé. La fonction principale () voit le membre protégé de toute classe, que ce soit la base ou dérivée, comme du même spécificateur, privé et interdit d'y accéder.

Si le deuxième segment de code de la fonction principale () n'est pas vendu, la même explication s'appliquera. C'est-à-dire que la fonction principale () ne pourra pas accéder à un membre protégé ou privé de la classe dérivée ou de la classe de base. Ceci est indépendant de la question de savoir si un membre protégé de la classe dérivée pourrait accéder à un membre protégé de la classe de base.

Classe dérivée protégée avec des membres protégés
Remplacez le spécificateur «public» par «protégé» dans la déclaration de la classe dérivée ci-dessus, comme suit:

classe ChildCla: protégé TheCla

Remettez le commentaire des segments de code dans la fonction principale (), si cela n'a pas déjà été fait. Compiler et exécuter le programme et noter que le résultat est comme avant.

Classe dérivée privée avec des membres protégés
Remplacez le spécificateur «protégé» par «privé» dans la déclaration de la classe dérivée ci-dessus, comme suit:

Classe ChildCla: TheCla privé

Compiler et exécuter le programme et noter que le résultat sera comme avant.

Classe dérivée du public avec des membres privés
Remplacez le spécificateur «privé» par «public» dans la déclaration de la classe dérivée ci-dessus, comme suit:

classe ChildCla: public thecla

Faire les membres de la classe dérivée privée. Compile et éxecute le programe. Le résultat n'est pas différent de la «classe publique dérivée avec des membres protégés».

Classe dérivée protégée avec des membres privés
Remplacez le spécificateur «public» par «protégé» dans la déclaration de la classe dérivée ci-dessus, comme suit:

classe ChildCla: protégé TheCla

Compile et éxecute le programe. Ce résultat n'est pas différent du cas «Classe dérivée protégée avec des membres protégés».

Classe dérivée privée avec des membres privés
Remplacez le spécificateur «protégé» par «privé» dans la déclaration de la classe dérivée ci-dessus, comme suit:

classe Childcla: private thecla

Compile et éxecute le programe. Ce résultat n'est pas différent du cas de «classe privée dérivée avec des membres protégés».

Conclusion

Les spécificateurs d'accès C ++ sont les mots «privés», «protégés» et «publics."Ils décident de l'accès pour les membres d'une classe. La région d'un spécificateur d'accès commence de son étiquette à la fin de la description de la classe (définition), ou au début d'un autre spécificateur d'accès. Tout membre d'une classe peut accéder à tout autre membre de cette même classe. Un membre privé d'une classe ne peut être accessible par aucune fonction extérieure, tout opérateur extérieur ou une classe dérivée.

Le membre de la classe de base doit être protégé afin qu'un membre privé de la classe de base soit accessible par un membre de la classe dérivée. Ce membre protégé de la classe de base est considéré comme un membre privé de la classe de base par une fonction extérieure ou un opérateur extérieur. Un membre public d'une classe peut être accessible par n'importe quelle fonction extérieure, tout opérateur extérieur ou une classe dérivée. En l'absence de tout spécificateur d'accès dans une classe, le spécificateur privé est supposé. C'est-à-dire que le spécificateur d'accès par défaut est privé.