class Book
{
public:
Book( const string& title ) : title_( title ) { n_++;}
const string& title() const { return title_; }
static int numberOfBooks() { return n_; }
private:
string title_;
static int n_;
};


costruttore book: perché il paramentro title dovrebbe essere una costante?
Forse per sottolineare che la stringa passata non viene modificata.
Cmq poteva risparmiarsi di utilizzare la constructor initializer list, che nn è necessaria.

Cosa vuol dire tutto il metodo title? Perché quei const di qua e di la?
Restituisce il titolo del libro. La funzione è const per sottolineare (e quindi correggere a tempo di compilazione) che al suo interno l'oggetto Book nn viene modificato.

p.s. in C++ nn esistono i methods. Quello è Java. In C++ esistono le member functions

Cosa ha di particolare un metodo statico?
Per essere invocata senza far riferimento ad un oggetto della classe.
Cioè puoi invocarlo come Book::numberOfBooks();