Я предполагаю, что вы говорите о функции-члене объявлений в заголовочном файле и определениях в исходных файлах?
Если вы привыкли к Java / Python / и т.д. Модель может показаться излишней. Фактически, если бы вы были так склонны, вы могли бы определить все встроенные функции в определении класса (в файле заголовка). Но вы определенно будете нарушать соглашение и платить цену дополнительного времени компоновки и компиляции каждый раз, когда вносите незначительные изменения в реализацию.
C ++, Ada и другие языки, изначально разработанные для крупномасштабных систем, держали определения скрытыми по какой-то причине - нет веской причины, по которой пользователи класса должны интересоваться его реализацией, а также причин, по которым они должны это делать. неоднократно платить, чтобы скомпилировать его. Меньше проблем в наши дни с более быстрыми системами, но все еще актуальными для действительно больших систем. Кроме того, TDD, stubbing и другие стратегии тестирования облегчаются изоляцией и более быстрой компиляцией.