OVH Cloud OVH Cloud

protected et pointeur sur fonction membre

1 réponse
Avatar
loic.actarus.joly
Bonjour =E0 tous et bonne ann=E9e,

Au boulot, on est tomb=E9 sur de code comme =E7a :

class A
{
protected:
int f();
};

class B : public A
{
typedef int(A::*fptr)();
fptr p;
int g()
{
//p =3D &A::f;
p =3D &B::f;
}
};

Si on enl=E8ve le commentaire, le code ne compile plus, ce qui semble en
accord avec la norme :

11.5 Protected member access
When a friend or a member function of a derived class references a
protected nonstatic member of a base class, an access check applies
in
addition to those described earlier in this clause.[...] If the
access is to form a pointer to member, the nested-name-specifier
shall
name the derived class (or any class derived from that class).

La question que l'on se pose est la motivation de cette r=E8gle.
Quelqu'un a une id=E9e ?

Merci,

--=20
Lo=EFc

1 réponse

Avatar
Gabriel Dos Reis
"" writes:

[...]

| La question que l'on se pose est la motivation de cette règle.
| Quelqu'un a une idée ?

Règle générale que A et B sont des classes différentes et qu'il
faudrait une permission spéciale de A pour que B touche à ses parties
protégées.

-- Gaby