• logicamente, nella definizione della classe (che solitamente sta in un header) dovrebbe starci solo l'interfaccia, in modo che, guardando l'header, si veda a colpo qual'è l'interfaccia senza stare a perdersi nei dettagli implementativi di ogni funzione; brevi pezzi di codice (getter/setter/...) tendono comunque a non "disturbare" in questo senso;
  • definire un metodo direttamente all'interno del blocco class fa sì che questo sia automaticamente considerato inline; i compilatori moderni tendono a non considerare "per davvero" questo suggerimento, ma compilatori più vecchi potrebbero prenderlo sul serio, il che può condurre a inutile duplicazione di codice nell'eseguibile senza vantaggi in termini prestazionali;
  • il codice che sta nel .cpp viene compilato una sola volta, il codice nell'header viene parsato e compilato in ogni translation unit; se si hanno tante classi questo può influire negativamente sui tempi di compilazione;
  • ogni modifica al codice scritto nella definizione della classe - e quindi nel relativo header - causa la ricompilazione di tutti i .cpp che lo includono; al contrario, la modifica dell'implementazione di un metodo definito all'interno di un .cpp causa solo la ricompilazione del .cpp in questione (più il linking con gli altri moduli oggetto); se la classe è usata da molti file nel progetto la perdita di tempo derivante da una ricompilazione globale può essere considerevole.