Dans une classe, il y aura une partie publique (mot clé public) accessible à tous, une partie privée (mot clé private) accessible uniquement aux fonctions membres de la même classe, et une partie (mot clé protected) accessible aux fonctions membres de la classe mais aussi aux fonctions membres des classes dérivées. Il s'agit d'une notion différente de celle de visibilité (un nom peut être visible, bien qu'on ne puisse y avoir accès).
Exemple:
class A{ private: int a; void f(); protected: int b; void g(); public: char c; void h(); }; class B : public A{ public: void i(); }; //... A x; B y;Pour cet exemple, on aura:
x.a
, x.b
, x.f()
et x.g()
qui seront interditsf
, g
, h
auront accès à tout : a
, f()
,
b
, g()
, c
h()
x.c
, x.h()
seront possibles.A::i()
aura accès à : b
, g()
, c
h()
A::i()
n'aura pas accès à : a
, f()
Par défaut, dans une class les membres sont privés, dans une struct les membres sont publics (c'est d'ailleurs la seule différence entre struct et class).