In c ++, la differenza tra il collegamento di un oggetto di classe e l'inclusione di esso.

3

questa è la mia prima volta qui.

Sono uno studente laureato in fisica e recentemente ho trovato un gruppo di ricerca con cui lavorare. Studiamo la meccanica statistica utilizzando modelli computerizzati, quindi c'è un aspetto significativo della programmazione.

Il mio primo lavoro è stato quello di prendere il vecchio codice di analisi dei dati (scritto in java) e ripulirlo in c ++. Il ragazzo prima di me che ha scritto il programma originale ha usato il metodo tradizionale della fisica per usare un'enorme quantità di codice spaghetti e spingerlo tutto in un costruttore. Questo mi ha infastidito un po ', quindi l'ho diviso in classi separate e ora ha una ragionevole struttura di classe.

In passato, ogni volta che avessimo definito una classe, avremmo messo le sue definizioni e i suoi metodi in una funzione di intestazione, quindi per utilizzarla dovremmo semplicemente includerla. So che questo infrange le regole su come usare i file .h e .cpp, ma c'è qualche altra ragione oltre all'etichetta del codice per compilare e collegare un oggetto di classe piuttosto che includerlo?

Ci scusiamo per la lunga domanda.

    
posta Jesse Raffield 17.04.2014 - 21:27
fonte

1 risposta

5

L'idea delle intestazioni è che separiamo l'interfaccia pubblica (cioè le dichiarazioni) dai dettagli interni dell'implementazione (cioè i corpi dei metodi effettivi). Questa divisione ha tutti i tipi di vantaggi:

  • C'è una funzione di aiuto di cui ho bisogno? Mettiamolo nel file .cpp e il codice esterno non può vederlo. Posso anche fare cose come using std senza interferire con altro codice.
  • Siamo bloccati in una mentalità C e vogliamo usare una macro? Dichiaralo nel file .cpp per evitare di inquinare il codice esterno.
  • C'è un bug in un metodo? Dopo averlo corretto, dobbiamo solo ricompilare quel singolo file .cpp e ricollegare l'applicazione. Questo è molto più veloce della ricompilazione di tutto .
  • Correlato a questo: i file di intestazione sono spesso inclusi più volte e pertanto vengono ricompilati più e più volte ... risparmiando tempo di compilazione e inserendo il minor numero possibile di informazioni nelle intestazioni.
  • Le intestazioni rendono possibile la gestione delle dipendenze cicliche su più file.

Ci sono anche alcuni inconvenienti con le intestazioni, ma non puoi fare nulla per cambiarlo: le intestazioni sono duplicazione del codice, sono linguaggio idiotico, il preprocessore C è di un disegno obsoleto e incapsulamento (la divisione tra interfaccia pubblica e dettagli di implementazione) non funziona in C ++ perché i campi privati di una classe fanno parte dell'interfaccia pubblica.

Che cosa prendiamo da questo? Principalmente il punto su tempo di compilazione . Le intestazioni ti consentono di ricompilare solo le parti che sono state modificate. Questo dovrebbe essere supportato praticamente da qualsiasi catena di costruzione: scopri il programma make se stai facendo tutto manualmente.

    
risposta data 17.04.2014 - 21:59
fonte

Leggi altre domande sui tag