Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841

    [c++] pro e contro di definire metodi dentro la classe

    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?

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

    Grazie.

  2. #2
    • 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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Alcuni aspetti li avevo immaginati, altri invece no.

    Grazie

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.