Rédaction de C ++ plus convivial
En C ++, vous n'avez pas du tout besoin d'utiliser des en-têtes. Vous pouvez définir l'objet entier dans un seul fichier comme vous le feriez avec C # ou Java. Les développeurs C ne conserveront généralement les appels externes que dans un fichier d'en-tête. Tous les appels internes seraient définis dans le fichier .c. De la même manière, vous pouvez réserver vos fichiers C ++ .h pour les classes / interfaces (classes abstraites virtuelles pures) / etc. qui sont destinés à être partagés en dehors de la DLL. Pour les classes / structures / interfaces internes, etc., vous incluriez simplement le fichier .cpp dont vous avez besoin:
#include<myclass.cpp>
Cela ne semble pas être l'approche la plus populaire, mais c'est du C ++ légal. Ce serait certainement une possibilité pour tout votre code interne. Cela permet au code interne et à l'ensemble de classes de changer beaucoup plus radicalement tout en offrant une interface plus stable pour le code en dehors de votre bibliothèque / exécutable avec lequel interagir.
Le fait d'avoir toute votre classe dans un seul fichier vous permettra de faire plus facilement ce que vous voulez. Cela ne résoudra pas le problème de renommer une méthode et d'avoir à rechercher chaque endroit où cette méthode est appelée, mais cela vous assurera d'avoir des messages d'erreur plus intelligibles. Rien de pire que d'avoir votre en-tête déclarer une méthode dans un sens, mais vous l'implémentez différemment. L'autre code qui appelle le fichier d'en-tête se compilera correctement et vous obtiendrez une exception de lien, tandis que le fichier d'implémentation sera celui qui se plaint que la méthode n'a pas été définie. Lorsque vous définissez chaque méthode en place (dans la déclaration de classe réelle), vous obtiendrez le même message d'erreur quel que soit le fichier qui l'inclut.
Vous pouvez également vous pencher sur cette question: bons outils de refactoring pour C ++
Comment C / C ++ résout les fichiers d'en-tête / d'implémentation
Au niveau C de base (et C ++ est construit sur cette base), les fichiers d'en-tête déclarent la promesse d'une fonction / struct / variable qui est suffisante pour permettre à un compilateur de créer le fichier objet. De même, les fichiers d'en-tête C ++ déclarent la promesse de fonctions, de structures, de classes, etc. C'est cette définition que le compilateur utilise pour réserver de l'espace dans la pile, etc.
Les fichiers .c ou .cpp ont l'implémentation. Comme le compilateur convertit chaque fichier d'implémentation en un fichier objet, il existe des crochets pour les concepts non implémentés (ce qui a été déclaré dans l'en-tête). L'éditeur de liens lie les crochets aux implémentations dans d'autres fichiers objets et crée un binaire plus grand qui inclut tout le code (bibliothèque partagée ou exécutable).
VS spécifique
En ce qui concerne l'utilisation de ceux de Visual Studio, il existe des assistants qui facilitent un peu les choses. Le nouvel assistant de classe créera votre paire correspondante d'en-têtes et de fichiers d'implémentation. Il existe même une fonction de navigateur de classe qui vous permettra de déclarer de nouvelles méthodes. Il injectera la définition dans l'en-tête et le talon d'implémentation dans le fichier .cpp. Visual Studio possède ces fonctionnalités depuis plus d'une décennie (aussi longtemps que je les ai utilisées).