class Base
{
private:
int var;
};
class Child : protected Base
{
void someFunc()
{
var = 5; // Error: Base::var is private
}
};
Qu'est-ce qui ne va pas?Hériter des problèmes
class Base
{
private:
int var;
};
class Child : protected Base
{
void someFunc()
{
var = 5; // Error: Base::var is private
}
};
Qu'est-ce qui ne va pas?Hériter des problèmes
Essayez ceci:
class Base
{
protected:
int var;
};
Voir this reference pour la différence entre le privé, protégé et public dans C++.
Même avec l'héritage protected
ou private
, vous n'avez pas accès à l'utilisation des membres private
dans les classes parentes.
Rendez-les protected
si vous avez vraiment besoin d'y accéder directement.
Editer: dang, battu à elle.
Vous avez déclaré var
pour avoir un accès privé dans Base
. Privé signifie que seule cette classe peut voir cette variable, et non des sous-classes.
Je pense que vous voulez probablement un accès protégé dans ce cas: protected signifie que cette classe et toute sous-classe peuvent le voir.
Editer: Dang, également battu pour cela.
Quel est le problème est que vous essayez d'accéder à une variable privée d'une autre classe qui n'est pas un ami.
La solution la plus simple consiste à protéger var
plutôt que privé, mais cela introduit des dépendances supplémentaires. Généralement, les variables doivent être privées. Stroustrup, dans son livre "Design and Evolution of C++", a regretté d'avoir introduit protected
. Il considère que les données protégées sont une invitation à des problèmes et, selon son expérience, cela n'est pas nécessaire. L'ouverture de membres de données à une manipulation arbitraire par une sous-classe déclarée n'est vraiment pas beaucoup mieux que de les rendre publics. Lorsque vous êtes tenté d'utiliser des membres de données protégés, vous devriez vous demander ce que vous essayez vraiment d'accomplir. C'est évidemment un exemple construit. S'il y avait une raison pour Child
pour modifier var
, cette raison pourrait être exprimée dans un nom de fonction, et les fonctions protégées ne sont pas aussi mauvaises que les membres de données protégées.
+1 pour avis sage. – luke
Oh, merci. J'ai oublié que privé/protégé sont différents dans la classe de base. – Ockonal
Je suis ravi. – luke