accès privé les membres de l'héritage
J'ai une classe A, qui ont un champ val déclaré comme privé.
Je veux déclarer une classe B qui hérite de A et avoir un accès à val.
Est-il un moyen de le faire sur le C++?
Je veux le faire parce que j'ai besoin de surcharger certaines fonctions de l'Un, sans changer le code.
Grâce.
- Vous ne pouvez pas accéder à une autre classe du domaine privé, n'a pas d'importance si c'est un ancêtre. Si vous n'avez pas de public getter/setter, vous êtes hors de la chance.
- Cette question serait mieux si vous avez posté une complète, exemple minimal programme nous permet de compiler et d'essai, qui illustre ce que vous essayez de faire.
- Vous pouvez "ombre" données / fonction membre dans Un avec des données en B. Il l'habitude de modifier les données de B à tous. Ce n'est pas la même que la surcharge, mais dans certains contextes, il peut faire le travail.
Vous devez vous connecter pour publier un commentaire.
Réponse rapide: Vous n'avez pas. C'est ce que l'
protected
mot-clé est pour, que vous souhaitez utiliser si vous souhaitez accorder l'accès à des sous-classes, mais personne d'autre.private
signifie que nul n'a accès à ces variables, même pas les sous-classes.Si vous ne pouvez pas modifier le code dans
A
à tous, peut-être il ya unpublic
/protected
méthode d'accès à cette variable. Sinon, ces variables ne sont pas destinés à être accessibles à partir de sous-classes et seulement hacks peut aider (que je n'encourage pas!).Membres privés d'une classe de base ne peuvent être accessibles par la base de fonctions membres (pas de classes dérivées). Si vous n'avez aucun droit, pas même une chance de le faire 🙂
class Base
les classes dérivées)
les classes
Bien, si vous avez accès à la classe de base, vous pouvez déclarer la classe B comme ami de classe. Mais comme d'autres l'ont expliqué: parce que vous le pouvez, cela ne signifie pas que c'est une bonne idée. L'utilisation des membres protégés, si vous voulez classes dérivées pour être en mesure d'y accéder.
friend
classes ne sont pas largement utilisés de sorte qu'ils ne savent pas à propos de cette fonctionnalité et/ou parce qu'elles viennent d'une langue qui n'a pas quelque chose comme ça) et 2)mentionne que ce n'est pas une bonne idée. Une meilleure réponse serait de dire POURQUOI il n'est pas une bonne idée, bien sûr. 🙂Que c'est faisable comme décrit dans ce Gourou de la Semaine - GotW #76 - Usages et Abus de Droits d'Accès. Mais il devrait être considéré comme un dernier recours.
Vous avez besoin de la définir comme
protected
. Membres protégés sont l'héritage de classes enfant, mais ne sont pas accessibles depuis le monde extérieur.