Les règles pour l'accès protected sont un peu complexes. Le standard dit la chose suivante (11.5-1) :
En clair, si on a :Citation:
L'accès doit se faire par un pointeur, une référence ou un objet de la classe dérivée elle même.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class B { protected : int i; }; class D1 : public B { }; class D2 : public B { void f(D1* pd1) { i=1; // ok pd1->i = 2; // interdit, il s'agit d'une autre classe dérivée } };