Scrivere più refactoring amichevole C ++
In C ++ non si deve usare le intestazioni a tutti. Puoi definire l'intero oggetto in un file come faresti con C # o Java. Gli sviluppatori C di solito mantengono le chiamate esterne in un file di intestazione. Tutte le chiamate interne sarebbero definite nel file .c. Allo stesso modo, è possibile prenotare i file .h C ++ per le classi / interfacce (classi astratte virtuali pure) / ecc. che devono essere condivisi all'esterno della DLL. Per classi / strutture / interfacce interne, ecc. Dovresti semplicemente includere il file .cpp che ti serve:
#include<myclass.cpp>
Questo non sembra essere l'approccio più popolare, ma è C ++ legale. Sarebbe sicuramente una possibilità per tutto il tuo codice interno. Ciò consente al codice interno e all'insieme di classi di cambiare molto più radicalmente fornendo al contempo un'interfaccia più stabile per il codice esterno alla libreria / eseguibile con cui interagire.
Avere tutta la classe all'interno di un file renderà più facile fare ciò che vuoi. Non risolverà il problema della ridenominazione di un metodo e la ricerca in ogni luogo chiamato quel metodo, ma assicurerà di avere messaggi di errore più comprensibili. Niente di peggio che avere l'intestazione dichiarare un metodo in un modo, ma lo implementi in modo diverso. Altro codice che chiama il file di intestazione verrà compilato correttamente e otterrai un'eccezione di collegamento, mentre il file di implementazione sarà quello che si lamenta che il metodo non è stato definito. Quando definisci tutti i metodi in atto (nella dichiarazione di classe effettiva), otterrai lo stesso messaggio di errore, indipendentemente dal file che lo include.
Potresti anche voler esaminare questa domanda: buoni strumenti di refactoring per C ++
Come C / C ++ risolve i file di intestazione / implementazione
A livello C di base (e C ++ è basato su quella base), i file di intestazione dichiarano la promessa di una funzione / struttura / variabile che è sufficiente per consentire a un compilatore di creare il file oggetto. Allo stesso modo i file di intestazione C ++ dichiarano la promessa di funzioni, strutture, classi, ecc. È questa definizione che il compilatore utilizza per riservare spazio nello stack, ecc.
I file .c o .cpp hanno l'implementazione. Mentre il compilatore converte ciascun file di implementazione in un file oggetto, ci sono hook in concetti non implementati (ciò che è stato dichiarato nell'intestazione). Il linker lega gli hook alle implementazioni in altri file oggetto e crea un file binario più grande che include tutto il codice (libreria condivisa o eseguibile).
VS specifico
Per quanto riguarda lavorare con quelli in Visual Studio, ci sono alcune procedure guidate che aiutano a rendere le cose un po 'più facili. La nuova procedura guidata di classe creerà la coppia di intestazione e file di implementazione corrispondenti. Esiste anche una funzione browser di classe che ti permetterà di dichiarare nuovi metodi. Inserirà la definizione nell'intestazione e lo stub di implementazione nel file .cpp. Visual Studio ha queste funzionalità da oltre un decennio (purché le abbia utilizzate).