PDA

Visualizza la versione completa : [c++] pro e contro di definire metodi dentro la classe


mamo139
13-02-2013, 21:12
Ciao a tutti,

stavo scrivendo una classe e per la prima volta mi sono trovato nella situazione di dover usare un template per la classe cosi:

template <class MIOTIPO>
class MiaClasse ...

ebbene ho tristemente scoperto che non posso definire i metodi fuori della classe nel relativo file cpp ma sono obbligato a definirli dentro la classe (il che, pensando a cosa e' un template, ha senso).

Ora... perche' io ho sempre definito i metodi di una classe fuori dalla classe in un file cpp invece che nel file h insieme alla classe? :stordita:

Quali sono i pro e i contro di tali approcci e in cosa ci rimetto a definire il metodo dentro la classe?

Grazie. :zizi:

MItaly
14-02-2013, 03:08
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.

mamo139
14-02-2013, 10:26
Alcuni aspetti li avevo immaginati, altri invece no.

Grazie :ciauz:

MItaly
14-02-2013, 21:19
:ciauz:

Loading