//Implementation.h //包含欲隐藏的私有实现的类生成类定义 class Implementation { public: Implementation(int v) :value(v) { //空函数体 } void setValue(int v) { value = v; } int getValue() { return value; } private: int value; };
//Interface.h //代理类Interface class Implementation;//声明 class Interface { public: Interface(int); ~Interface(); void setValue(int); int getValue() const; private: Implementation *iPtr; };
//Interface.cpp #include "Interface.h" #include "Implementation.h" Interface::Interface(int v) :iPtr(new Implementation(v)) { // empty body } Interface::~Interface() { delete iPtr; iPtr = 0; } void Interface::setValue(int v) { iPtr->setValue(v); } int Interface::getValue() const { return iPtr->getValue(); }
//main.cpp //#include "Implementation.h" #include "Interface.h"//只有这一个头文件包含在代码中,!!! #include <iostream> using namespace std; int main() { Interface testInt(6); cout << "Interface contains: " << testInt.getValue() << " before setValue." << endl; testInt.setValue(7); cout << "Interface contains:" << testInt.getValue() << " after setValue." << endl; system("pause >> cout"); return 0; }