text: One way to do it is to make Class1 call some other class for all actual implementation. So you make a new class, Class1Impl, which does all the real work. Class1 has a pointer to Class1Impl, and all of the member functions of Class1 call the appropriate member function of Class1Impl. You don't need to give out the header for Class1Impl as it can just be predeclared at the top of the Class1 declaration. \nEx:\n//class1.h\nclass Class1Impl;\n\nclass Class1\n{\nprivate:\nClass1Impl* m_pImpl;\n\npublic:\n  Class1();\n  void DoStuff();\n};\n\n//Class1.cpp\n#include "Class1.h"\n#include "Class1Impl.h"\n\nClass1::Class1()\n{\n  m_pImpl = new Class1Impl;\n}\n\nvoid Class1::DoStuff()\n{\n  m_pImpl->DoStuff();\n}\n\n//class1impl.h\n//hidden, never give this source out\nclass Class1Impl\n{\nprivate:\n  long m_lHiddenVal;\npublic:\n  void DoStuff() { printf("Woo! %d", m_lHiddenVal); }\n};