tutte le variabili che inserisci nel campo "private" sono utilizzabili solo dall'interno della classe in cui stai lavorando,attraverso delle opportune funzioni.


class Contatore {
private :
int i ;
public :
Contatore (); // costruttore
void inc();
void dec();
int GetValue();
};

ti ho riportato un esempio semplice...i è una variabile privata,ma può essere usata solo all'interno della classe contatore.

Nell'area pubblica c'è tutto quello che gli altri (utenti o altre classi) possono vedere e usare.Le funzioni che ci sono possono anche alterare il valore della variabile privata,ma ne hanno diritto solo loro..dall'esterno,cioè,non è possibile accedere direttamente ad i..
In pratica, la variabile i può essere solo incrementata,decrementata o visualizzata:sono questi i "paletti" introdotti dalla programmazione ad oggetti.Non puoi,ad esempio,aggiungere un valore arbitrario ad i o usarla in altre applicazioni..

Spero che ti sia chiaro il concetto di public e private..passiamo a protected.
Quest'ultima opzione è una via di mezzo tra le due..ciò che ci scrivi all'interno non può comunque essere usato dagli altri utenti o da classi arbitrarie,ma solo dalle classi figlie...Saprai benissimo che a partire da una classe è possibile costruirne altre attraverso l'ereditarietà:la classe figlia però non ha diritto di usare le variabili o funzioni private del padre(altrimenti non sarebero private,ti pare??),ma possono accedere a tutto quello che è contenuto in protected..
Come le classi figlie allo stesso modo si comportano le classi friend (amiche)..
Riassumendo:

private --> solo dalla classe in questione

protected --> solo dalle clessi figlie e dalle funzioni amiche

public --> da tutti

Spero di essere stato esauriente..

Ciao!!