Votre collègue qui est mal, de la façon la plus courante est et a toujours été de placer du code dans .fichiers cpp (ou quelle que soit l'extension que vous souhaitez) et les déclarations dans les en-têtes.
Il y a parfois le mérite de mettre le code dans l'en-tête, cela peut permettre de plus intelligent inline par le compilateur. Mais dans le même temps, il peut détruire votre temps de compilation puisque tout le code doit être traité à chaque fois qu'il est compris par le compilateur.
Enfin, il est impossible circulaire pour des relations d'objet (parfois souhaité) lorsque tous les code les en-têtes.
Ligne de fond, vous avez eu raison, il a tort.
EDIT: j'ai pensé à votre question. Il y a un cas où ce qu'il dit est vrai. modèles. Beaucoup de nouveaux "moderne" des bibliothèques telles que coup de pouce de faire un usage intensif des modèles et sont souvent "en-tête uniquement." Toutefois, cela ne devrait être fait lorsque vous traitez avec des modèles comme c'est le seul moyen de le faire lorsque vous traitez avec eux.
EDIT: Certaines personnes souhaiteraient un peu plus de précisions, voici quelques réflexions sur les inconvénients de l'écriture de "l'en-tête uniquement" code:
Si vous recherchez autour de vous, vous verrez beaucoup de gens qui essaient de trouver un moyen de réduire les temps de compilation lorsque vous traitez avec des boost. Par exemple: Comment réduire les temps de compilation avec Boost Asio, qui est de voir un 14s de la compilation d'un seul 1K fichier avec boost inclus. 14s peut sembler ne pas être "explosion", mais il est certainement beaucoup plus que ce qui est typique et peut ajouter assez rapidement. Lorsque vous traitez avec un grand projet. L'en-tête uniquement bibliothèques en effet les temps de compilation dans un tout à fait mesurable. Nous venons de le tolérer parce que boost est donc utile.
En outre, il ya beaucoup de choses qui ne peut pas être fait dans les en-têtes (même boost fournit des bibliothèques vous devez le lier à certains éléments tels que les threads, système de fichiers, etc). Un exemple Principal est que vous ne pouvez pas avoir de simples objets globaux dans l'en-tête uniquement libs (sauf si vous recourir à l'abomination qui est un singleton) que vous allez courir dans de multiples erreurs de définition.
Comme un point final, lors de l'utilisation de boost comme un exemple d'en-tête uniquement code, un énorme détail a souvent manqué.
Boost est de bibliothèque, pas de niveau de l'utilisateur code. donc, il ne change pas souvent. Le code de l'utilisateur, si vous mettez tout dans les en-têtes, chaque petit changement va vous amener à avoir à recompiler l'ensemble du projet. C'est une monumentale perte de temps (et n'est pas le cas pour les bibliothèques qui ne changent pas de compiler compiler). Lorsque vous divisez les choses entre en-tête/source et mieux encore, utilisez déclaration à réduire les contient, vous pouvez économiser des heures de recompiler lorsqu'il est ajouté dans une journée.