Вам может потребоваться совместимость двоичных версий различных версий этого класса. Вы также можете обнаружить, что по другим причинам вы хотите инкапсулировать определение класса, например, потому что для определения требуется заголовок с плохим макросом и тому подобное, или заголовок, содержащий то, что необходимо для определения класса. очень долгое время компиляции.
Например, я написал класс для инкапсуляции функций, предлагаемых моей операционной системой - на данный момент, таких как динамическая загрузка и создание окна. Несмотря на то, что когда-либо будет только одна реализация для одной цели компиляции (Windows и т. Д.), Я решил использовать абстракцию во время выполнения, потому что я хотел гарантировать, что остальная часть моего кода никогда не будет видеть заголовок, специфичный для платформы, и заголовок Windows полон такого количества макросов и прочего, что я не хотел, чтобы они вытекли.