Что-то, что вы могли бы рассмотреть, в зависимости от остальной части вашего проекта, это фабрика, где у вашего абстрактного класса есть статический метод (или несколько статических методов, в зависимости от того, как вы его реализуете), который создает соответствующий подкласс и возвращает его как IConverter *. Благодаря этому вы можете представить только абстрактное определение в заголовочном файле и иметь все конкретные определения и реализации класса в одном файле .cpp вместе с реализацией суперкласса. Это становится немного громоздким, если ваш подкласс большой, но с меньшими классами это уменьшает количество файлов, которыми вы должны управлять.
Но, как уже отмечали другие, это в конечном счете призыв к решению. Единственные проблемы с производительностью будут связаны с компиляцией; больше файлов cpp может занять (немного) больше времени для компиляции, а больше файлов заголовков может увеличить анализ зависимостей. Но не требуется, чтобы каждый заголовочный файл имел соответствующие cpp и наоборот.
На основании комментариев я бы порекомендовал такую структуру:
IConverter.h ==> определение IConverter
Converters.h ==> определения всех подклассов
IConverter.cpp ==> включает IConverter.h и Converters.h, содержит реализацию абстрактной функциональности IConverter (статический метод фабрики и любую наследуемую функциональность)
TextConvter.cpp, ImagerConverter.cpp и т. Д. ==> отдельные файлы cpp для каждого подкласса, каждый из которых содержит IConverter.h и Converters.h
Это позволяет включать IConverter.h только в любые клиенты, которые используют заводские и общие функциональные возможности. Поместив все другие определения в один заголовок, вы сможете объединить, если они в основном одинаковы. Отдельные файлы cpp позволяют вам воспользоваться преимуществами компилятора, упомянутыми Брайаном. Вы могли бы включить определения подкласса в заголовочных файлах, как уже упоминалось, но это на самом деле ничего вам не дает. Ваш компилятор, как правило, умнее, чем вы, когда речь идет об оптимизации, например, встроенной.