Hvis man bruger "virtuelle base class'er" og "virtuelle constructoer/class factories" vil man kunne lave en indkapsling.
Ideen er at man i foo.h har:
class FooInterface
{
public:
virtual ~FooInterface() {}
virtual void Bar() = 0;
};
extern FooInterface *CreateFoo();
Og i foo.cpp:
class Foo : public FooInterface
{
public:
void Bar()
{
...
}
private
int Whatever;
};
FooInterface *CreateFoo()
{
return new Foo;
}
main.cpp kunne være:
#include "foo.h"
int main()
{
FooInterface *foo = CreateFoo();
foo->bar()
delete foo;
}
Så vil main.cpp kun kende FooInterface, og ikke Foo, og dermed heller ikke Foo's private.
Ofte vil man også have class'er der kun er kendt af dele af programmet. Hvis man f.ex. har et typisk skole eksempel med læsfil, process/GUI, skrivfil, vil process/GUI ikke have brug for at kende til filer, og læsfil og skrivfil vil ikke behøve at kende til GUI.