Uno svantaggio potrebbe essere la mancanza di occultamento/incapsulamento delle informazioni.
Preferisco avere il file di intestazione più minimale possibile. Significa che non sono obbligato a continuare a supportare così tante funzioni. Se voglio cambiare qualcosa, e che qualcosa non è stato esposto nell'intestazione pubblica, ci sono molte più possibilità che io possa cambiarlo internamente alla classe senza influenzare nessun altro.
EDIT:
Luca ha chiesto per un esempio, ecco ya go:
Supponiamo di avere una classe chiamata Car
. E, l'unica cosa per cui lo hai costruito era ottenere dal punto A al punto B. Io personalmente preferirei mantenere il mio file di intestazione in: una classe chiamata Car
e un metodo chiamato Drive
. Dal modo in cui hai formulato la tua domanda ("tutte le classi che posso") mi aspetterei di trovare classi come "DieselEngine", "PetrolEngine", "HybidEngine" e simili nel tuo file di intestazione. Il problema con questo è che altre persone che lavorano al tuo progetto (o, tu, nel tempo) iniziano a usare quelle classi esposte. Ora, due anni dopo, decidi "Hrm ... che la classe PetrolEngine mi stia davvero causando problemi, penso che lo rimuoverò e lo sostituirò interamente con la HybridEngine nella mia classe Car" - beh, ora PetrolEngine è incluso in 100 altri file per motivi che non capisci - e ora sei costretto a tenere PetrolEngine in giro (e lavorare come al solito) per tutti quegli altri ragazzi che lo hanno usato in alcuni dicono che non sei proprio sicuro di - perché non avevi un solido "contratto" di lavoro per come volevi che quella classe fosse usata in primo luogo. Era un dettaglio di implementazione di ciò che volevi davvero realizzare: costruire un'auto.
EDIT per discutere commenti su informazioni nascondere:
Se tutto quello che stai facendo è rigorosamente in avanti dichiarando il nome della classe/struct - beh, credo vorrei chiedere "perché" di nuovo. Se sono un utente del tuo file di intestazione e delle classi, e non posso realmente fare nulla con quella classe - e non è esposto come parametro o tipo di ritorno dell'API della tua classe principale - allora perché esporlo a tutti ?
Se lo si utilizza per i controlli di sicurezza del tipo in fase di compilazione per strutture di dati opache - bene - questa è una cosa. Ma il modo in cui hai formulato la tua domanda mi ha fatto sembrare come che tutto il è andato nel file di intestazione come una cosa ovvia.
Meno possibilità di bere caffè durante una costruzione completa? –