//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;
}