Sì, puoi farlo in C ++ usando l'idioma PIMPL . Se si utilizza questo idioma, è sufficiente lasciare che il client veda un'intestazione che definisce una semplice classe wrapper, che ha un puntatore alla classe reale come membro dei dati. Poiché si utilizza un puntatore, è necessario inoltrare solo la classe di implementazione reale nell'intestazione della classe wrapper. L'intestazione della classe di implementazione reale deve solo essere inclusa nel file .cpp del wrapper, quindi il client non la vedrà mai.
Detto questo, l'uso di PIMPL aggiunge complessità al tuo codice. Ora, se hai bisogno di una nuova funzione di membro pubblico, dovresti aggiungerla in due punti. Inoltre, dovresti passare attraverso più livelli di stack di chiamate durante il debug. Dovresti davvero pensare a lungo e duramente se nascondere alcune funzioni del tuo cliente valga questo lavoro extra.
P.S. L'idioma PIMPL ha un altro uso importante. Ti consente di rompere le dipendenze tra i componenti, riducendo l'accoppiamento rendendo più semplice la modifica del codice e riducendo in modo significativo i tempi di compilazione.