Ваш колега помиляється, загальним способом є і завжди було вводити код у файли .cpp (або будь-яке розширення, яке вам подобається) та декларації у заголовках.
Іноді є певна заслуга введення коду в заголовок, це може дозволити компілятору більш розумне вбудовування. Але в той же час він може знищити ваші рази компіляції, оскільки весь код повинен оброблятися кожен раз, коли він включається компілятором.
Нарешті, часто дратує наявність кругових зв'язків об’єктів (іноді бажаних), коли весь код є заголовками.
Підсумок, ви мали рацію, він помиляється.
EDIT: Я думав над вашим запитанням. Є один випадок, коли те, що він говорить, є правдою. шаблони. Багато нових "сучасних" бібліотек, таких як boost, сильно використовують шаблони і часто є "лише заголовком". Однак це слід робити лише при роботі із шаблонами, оскільки це єдиний спосіб зробити це при роботі з ними.
РЕДАКТУВАННЯ. Деякі люди хотіли б трохи роз’яснити, ось деякі думки щодо недоліків написання коду «тільки в заголовку»:
Якщо ви обшукуєте, ви побачите досить багато людей, які намагаються знайти спосіб зменшити час компіляції при роботі зі збільшенням. Наприклад: Як зменшити час компіляції за допомогою Boost Asio , який бачить компіляцію з 14-х годин одного файлу 1К з включеним прискоренням. 14-і можуть не здаватися "вибухаючими", але це, звичайно, набагато довше, ніж типові, і може скластися досить швидко. Маючи справу з великим проектом. Тільки бібліотеки заголовків впливають на час компіляції досить вимірюваним чином. Ми просто терпимо це, тому що підвищення настільки корисне.
Крім того, є багато речей, які неможливо виконати лише в заголовках (навіть прискорення має бібліотеки, до яких потрібно зв’язати певні частини, такі як потоки, файлова система тощо). Основний приклад - це те, що ви не можете мати простих глобальних об'єктів у заголовках, що містять лише заголовки (якщо тільки ви не вдаєтесь до огиди, яка є однотонною), оскільки ви зіткнетесь з помилками численних визначень.ПРИМІТКА . Вбудовані змінні C ++ 17 зроблять цей конкретний приклад в майбутньому.
Нарешті, під час використання boost як приклад коду лише заголовка, величезна деталь часто пропускається.
Підвищення - це бібліотека, а не код рівня користувача. тому це не так часто змінюється. У коді користувача, якщо ви помістите все в заголовки, кожна невелика зміна призведе до того, що вам доведеться перекомпілювати весь проект. Це монументальна втрата часу (і це не стосується бібліотек, які не змінюються від компіляції до компіляції). Коли ви розділите речі між заголовком / джерелом і ще краще, використовуйте переадресації для зменшення вмісту, ви можете заощадити години перекомпіляції, коли їх додано протягом дня.