[POO] Les mystères de l'attribut protected
Bonjour à tous,
Aujourd'hui j'ai appris qu'on ne pouvait pas faire ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Mother
{
public:
void setAttr (const Mother& obj) {this->attr = obj.attr;}
protected:
int attr;
};
class Daughter: public Mother
{
int getAttr () {return this->attr;}
void setAttr (const Mother& obj) {this->attr = obj.attr;}
}; |
Et je dois dire que ça me laisse un peu sur le cul...
En effet, à l'intérieur d'une classe, on peut accéder aux attribut privés d'un objet tiers si celui-ci est du type de la dite classe.
Jusqu'ici tout va bien.
Et logiquement je pensais donc qu'a l'intérieur d'une classe dérivée, on pouvait accéder aux attributs protected des objets qui étaient de type des classes mères.
Mais en fait il n'en est rien...
J'aimerais savoir s'il y a une raison à cela ?
Apparemment ca serait la faute aux inavariants... mais ça ne m'éclaire pas beaucoup étant donné que je sais à peine ce que c'est.
Si vous aviez des explications ou des liens la dessus, ça m'intéresse fortement.
Merci beaucoup.