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