47 votes

erreur d’héritage C++ subtile avec des champs protégés

Vous trouverez ci-dessous un exemple subtil d’accès au champ protégé x d’une instance. B est une sous-classe de A donc toute variable de type B est également de type A. Pourquoi B::foo() peut-il accéder au champ x de b, mais pas au champ x de a ?

Voici l’erreur que j’obtiens avec g++

14voto

Billy ONeal Points 50631

Considérer:

1voto

firyice Points 87
<blockquote> <p>Pourquoi B::foo() peut-il accéder au champ x de b, mais pas au champ x de a ?</p> <p>Un membre protégé n’est accessible qu’aux autres membres de la même classe (ou classes dérivées). </p><p><code></code> pointe vers un membre protégé d’une instance de classe B (par héritage), afin de <code></code> pouvoir y accéder. </p><p><code></code> pointe vers un membre protégé d’une instance de classe A et ne peut donc <code></code> pas y accéder. </p></blockquote>

0voto

Kerrek SB Points 194696

La classe n’est pas identique à la classe . C’est pourquoi les membres de la classe ne peuvent pas accéder aux membres non publics de la classe.

D’autre part, la classe *dérive* publiquement de la classe , de sorte que la classe a maintenant un membre (protégé) auquel tout membre de la classe peut `` accéder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X