Předpokládám, že máte v hlavičkovém souboru public a protected atributy/metody a všechno ostatní v nějaké interní třídě, která je jen deklarována formou ukazatele na ní? Šlo by prosím dát příklad - možná se nebavíme o stejné věci (a nejsem strýček Bob, který to možná taky myslel jinak .-)
1) Je třeba si uvědomit, že C++ umožnuje roztáhnout implementaci třídy do libovolného množství modulů. Což je vynikající věc, která mi strašně chybí v Javě, PHP, C# a mnoha dalších jazycích. Proto je potřeba, aby v hlavičkovém souboru bylo vidět vše.
Představte si jen ti třídu Thread. Část metod třídy je platformově závislá, část metod třídy je platfrmově nezávislá. Ideální na rozdělení implementace třídy do modulů thread_common.cpp, thread_linux.cpp, thread_msw.cpp, thread_qnx.cpp, atd.
2) C++ nepotřebuje znát detaily o datech a strukturách/třídách/atd. pokud k nim přistupuje pouze přes ukazatel. To je stejné i v C.
Pokud chcete mít privátní členy třídy nerozepsané v hlavičkovém souboru, nebo to není praktické - na každé platformě je to jinak, pak máte možnost toto použít.
class Thread
{
public:
static Thread* getCurrentThread();
Thread();
virtual ~Thread();
int getPriority();
void setPriority(int priority);
void isAlive();
void start();
protected:
virtual void main() = 0;
private:
// Skrývání pomocí struktury __ThreadBlock, kterou zná jen implementace.
// Tento způsob je pro implementaci nejpříjemnější.
::internal_thread::__ThreadBlock * _ThreadBlock;
// Jiná možnost skrývání pomocí bloku paměti, jejíž význam zná jen implementace.
char _ThreadHandle[1024];
// Nebo nemusíte vůbec deklarovat ani typ interních dat.
void * _InternalPrivateDataBlock;
// Atd. atd. atd. - Jste omezeni jen vlastní představivostí.
};