Раздельная компиляция в C++ — это методология организации кода, которая позволяет компилировать исходный код программы по частям (юнитам трансляции), а затем объединять эти части в один исполняемый файл или библиотеку. Основная цель раздельной компиляции — ускорение времени сборки проекта и упрощение его поддержки.
Юнит трансляции (translation unit) в C++ — это набор исходных файлов и всех включенных в них заголовочных файлов, которые компилируются вместе. Каждый юнит трансляции обрабатывается компилятором как единое целое.
Разбиение кода на интерфейс и реализацию
- 
Интерфейс: Объявления функций, классов, типов и констант, которые используются другими частями программы. Этот код обычно помещается в заголовочные файлы ( .h,.hpp).
- 
Реализация: Реализация функций и методов классов, которая содержит конкретные детали их работы. Этот код обычно помещается в исходные файлы ( .cpp).
Организация кода в нескольких файлах
Чтобы организовать код в нескольких файлах с использованием раздельной компиляции:
- Заголовочные файлы (example.h):- Содержат объявления функций, классов и переменных.
- Защищены от множественного включения с помощью препроцессорных директив (#ifndef,#define,#endif)
 
- Исходные файлы (example.cpp):- Содержат реализации функций и методов, объявленных в заголовочных файлах.
- Включают соответствующие заголовочные файлы для доступа к объявлениям.
 
Пример использования: Пример аддитивности с классами
Включения и правило одного определения (ODR)
- 
Включения (include) в C++ позволяют включать содержимое одного файла в другой, что упрощает организацию кода и его повторное использование. 
- 
Правило одного определения (ODR) гласит, что в программе должно быть только одно определение каждой сущности (функции, переменной, класса и т.д.) во всех её юнитах трансляции. Исключением являются inlineфункции и шаблоны, которые могут иметь определения в нескольких юнитах трансляции.