// 7. Proxy êëàñîâå. // // Fig. 7.20: implementation.h // Header file for class Implementation class Implementation { public: // constructor Implementation( int v ) : value( v ) // initialize value with v { // empty body } // end constructor Implementation // set value to v void setValue( int v ) { value = v; // should validate v } // end function setValue // return value int getValue() const { return value; } // end function getValue private: int value; }; // end class Implementation /****/ // Fig. 7.21: interface.h // Header file for interface.cpp class Implementation; // forward class declaration class Interface { public: Interface( int ); void setValue( int ); // same public interface as int getValue() const; // class Implementation ~Interface(); private: // requires previous forward declaration (line 4) Implementation *ptr; }; // end class Interface /****/ // Fig. 7.22: interface.cpp // Definition of class Interface #include "interface.h" // Interface class definition #include "implementation.h" // Implementation class definition // constructor Interface::Interface( int v ) : ptr ( new Implementation( v ) ) // initialize ptr { // empty body } // end Interface constructor // call Implementation's setValue function void Interface::setValue( int v ) { ptr->setValue( v ); } // end function setValue // call Implementation's getValue function int Interface::getValue() const { return ptr->getValue(); } // end function getValue // destructor Interface::~Interface() { delete ptr; } // end ~Interface destructor /****/ // Fig. 7.23: fig07_23.cpp // Hiding a class’s private data with a proxy class. #include using std::cout; using std::endl; #include "interface.h" // Interface class definition int main() { Interface i( 5 ); cout << "Interface contains: " << i.getValue() << " before setValue" << endl; i.setValue( 10 ); cout << "Interface contains: " << i.getValue() << " after setValue" << endl; return 0; } // end main