Quelles sont les spécificateurs d'accès? Dois-je hériter avec private, protected ou public?
Je suis confus au sujet de la signification de modificateurs d'accès à l'égard de l'héritage. Quelle est la différence entre héritage impliquant la private
, protected
et public
de mots-clés?
- Où en êtes-vous essayer d'utiliser ce protégé de membre? Que pensez-vous vous protéger?
- Quelle autre fonction? Pouvez-vous donner un minimum mais l'exemple de code complet qui donne l'erreur?
- Poste le code de ce que vous êtes en train d'essayer de faire.
- Merci pour votre réponse. J'ai compris la façon de procéder avec la Sla à l'aide!
- C'est un magnifique forum pour apprendre et la plupart des gens sont toujours prêts à aider juste ce que tout le monde veut voir, c'est la clarté dans les questions, la motivation et la volonté d'apprendre(les tentatives d'écrire du code ou de comprendre le concept) plutôt que d'amener les gens à faire pour soi-même. Donc, ne pas oublier les points quand vous poster la prochaine fois. Heureux d'apprendre! 🙂
- Je vais le rappeler. 🙂 Merci beaucoup.
Vous devez vous connecter pour publier un commentaire.
ce sont des Spécificateurs d'Accès?
Il y a 3
access specifiers
pour un class/struct/Union en C++. Ces spécificateurs d'accès définir la façon dont les membres de la classe peuvent être accessibles. Bien sûr, tout membre d'une classe est accessible à l'intérieur de cette classe(à l'Intérieur de toute fonction membre de la même classe). Aller de l'avant pour le type de spécificateurs d'accès, ils sont:Public - Les membres déclarée Public sont accessibles depuis l'extérieur de la Classe par le biais d'un objet de la classe.
Protégé - Les membres déclarée Protégée sont accessibles à partir de l'extérieur de la classe MAIS seulement dans une classe dérivée.
Privé - Ces membres sont uniquement accessibles à partir de l'intérieur de la classe. Aucun Accès à l'extérieur est autorisé.
Un Exemple De Code Source:
L'héritage et les Spécificateurs d'Accès
L'héritage en C++ peut être un des types suivants:
Private
HéritagePublic
HéritageProtected
héritageIci sont les règles d'accès à l'égard de chacune de ces:
Patrimoine Public:
c'est à dire Pas de changement dans l'Accès des membres. Les règles d'accès, nous avons discuté avant sont ensuite appliqués à ces membres.
Exemple De Code:
Privé De L'Héritage:
Un Exemple de code:
Protégé De L'Héritage:
Un Exemple De Code:
Rappelez-vous les mêmes règles d'accès s'appliquent pour les classes et les membres en bas de la hiérarchie d'héritage.
Points importants à noter:
- Spécification d'accès est par Catégorie et non par l'Objet
Noter que la spécification d'accès C++ de travail sur la fonction de la Classe et non pas par objet.
Un bon exemple de ceci est que dans un constructeur de copie ou Copie de l'opérateur d'Assignation de fonction, tous les membres de l'objet est transmis peut être consulté.
- Une classe Dérivée peut accéder uniquement aux membres de sa propre classe de Base
Envisager la exemple de code suivant:
Il donne une erreur de compilation:
Parce que la classe dérivée ne peut accéder aux membres de son propres de Base de Catégorie. Notez que l'objet
obj
d'être passé ici est en aucune façon liée à laderived
fonction de classe dans lequel il est accessible, c'est une toute autre objet, et doncderived
fonction membre ne peut pas accéder à ses membres.Qu'est ce qu'un
friend
? Commentfriend
une incidence sur l'accès spécification de règles?Vous pouvez déclarer une fonction ou une classe comme
friend
d'une autre classe. Lorsque vous procédez ainsi l'accès à la spécification de règles ne s'appliquent pas à lafriend
ed de classe/fonction. La classe ou d'une fonction peut accéder à tous les membres de cette classe particulière.Non, ils ne le font pas, au contraire ils permettent de renforcer l'Encapsulation!
friend
navire est utilisé pour indiquer un intentionnelle de couplage fort entre les deux entités.S'il existe une relation spéciale entre les deux entités, telles que l'on a besoin d'accéder à d'autres
private
ouprotected
membres, mais Vous ne voulez pas tout le monde d'avoir accès à l'aide de lapublic
spécificateur d'accès alors vous devriez utiliserfriend
navire.friend
, les relations avec imbriqué/types de membres, et plus important encore, une définition précise de ce moyen protégé qui aborde le malentendu commun que cela devrait compiler:class base { protected: int x; }; struct derived : base { static void f( base& b ) { b.x = 5; } };
virtual
affecte l'héritage? Je suis arrivé ici par googler pour que. Je vais revenir sur les résultats de la recherche et de l'éditer en moi-même si personne ne le fait par le temps, j'ai appris.L'explication de Scott Meyers Effective C++ pourrait aider à comprendre quand les utiliser:
Public héritage du modèle "relation" est-un", alors que privés de l'héritage doit être utilisé pour "est mis en œuvre en termes de" - de sorte que vous n'avez pas à adhérer à l'interface de la super-classe, vous êtes juste à la réutilisation de la mise en œuvre.