Buonasera.

Ho due dubbi riguardo a questo codice:

codice:
class NomeClasse;

typedef unsigned int nometipo;

class NomeClasse
{
public:

    //Inizializzazione
    Prototipo();
    Prototipo(char c);
    Prototipo(char c, int i);
    Prototipo(const char *str);
    ...
}
I miei dubbi sono:

1. Non capisco perché nell'esempio venga scritto "class NomeClasse;" all'inizio... a che serve? A caricare i typedef? Serve per "pre-caricare la classe"? E per quale motivo?

2. Nell'inizializzazione della classe mi ritrovo con dei prototipi con lo stesso nome ma che accettano argomenti diversi... quello che non capisco è: come fa il compilatore a non confondersi? "Acchiappa" al volo il prototipo che accetta gli argomenti come quelli che gli sono stati passati? Oppure serve a qualche altra cosa che non sò?

Grazie in anticipo.