// IN Mapping.h #include #include class Mapping { public: Mapping(string name, int value); ~Mapping(void); void SetName(string name); string GetName(void); void SetValue(int value); int GetValue(void); private: class MappingImpl& my; }; // MAIN PROGRAM int main(void) { Mapping m1("two",1); Mapping m2("three",1); cout << m1.GetName() << ": " << m1.GetValue() << endl; cout << m2.GetName() << ": " << m2.GetValue() << endl; m1.SetName("one"); m2.SetValue(3); cout << m1.GetName() << ": " << m1.GetValue() << endl; cout << m2.GetName() << ": " << m2.GetValue() << endl; } // IN Mapping.C class MappingImpl { private: friend class Mapping; string Name; int Value; }; Mapping::Mapping(string name, int value) : my ( *new MappingImpl ) { my.Name = name; my.Value = value; } Mapping::~Mapping(void) { delete &my; } void Mapping::SetName(string name) { my.Name = name; } string Mapping::GetName(void) { return my.Name; } void Mapping::SetValue(int value) { my.Value = value; } int Mapping::GetValue(void) { return my.Value; }