J'ai une classe A, qui a un champ val déclaré privé. Je veux déclarer une classe B, qui hérite de A et a accès à val. Existe-t-il un moyen de le faire en C++?
Je veux le faire car j'ai besoin de surcharger certaines fonctions de A, sans changer du tout le code A.
Merci.
Réponse rapide: non. C'est à cela que sert le mot clé protected
, que vous souhaitez utiliser si vous souhaitez accorder l'accès aux sous-classes mais à personne d'autre.
private
signifie que personne n'a accès à ces variables, pas même aux sous-classes.
Si vous ne pouvez pas du tout modifier le code dans A
, il existe peut-être une méthode d'accès public
/protected
pour cette variable. Sinon, ces variables ne sont pas censées être accessibles à partir de sous-classes et seuls les hacks peuvent aider (ce que je n'encourage pas!).
Membres privés d'une classe de base n'est accessible que par les fonctions membres de base (pas les classes dérivées). Vous n'avez donc aucun droit, même pas la possibilité de le faire :)
class Base
Eh bien, si vous avez accès à la classe de base, vous pouvez déclarer la classe B comme classe amie . Mais comme d'autres l'ont expliqué: parce que vous le pouvez, cela ne signifie pas que c'est une bonne idée. Utilisez des membres protégés si vous souhaitez que les classes dérivées puissent y accéder.
C'est faisable comme décrit dans ce gourou de la semaine - GotW # 76 - Usages et abus des droits d'accès . Mais cela devrait être considéré comme un dernier recours.
Vous devez le définir comme protected
. Les membres protégés sont hérités des classes enfants mais ne sont pas accessibles depuis le monde extérieur.