头文件
/**
* 功能:句柄类,头文件只包含公共的接口和单一的指针,该指针指向一个没有
完全定义的类
* 时间:2014年8月25日07:52:42
* 作者:cutter_point
*/
#ifndef HANDLE_H_INCLUDED
#define HANDLE_H_INCLUDED
class Handle
{
struct Cheshire; //这个只是声明,如果要改变Cheshire的组成,唯一要重新编译的是
//Handle因为头文件并没有动
Cheshire* smile; //来!微笑^_^
public:
void initialize(); //初始化
void cleanup(); //回收内存
int read(); //输出当前的数据
void change(int); //改变当前的值
};
#endif // HANDLE_H_INCLUDED
声明文件
/**
* 功能:包含具体实现的结构体被隐藏在实现文件中
* 时间:2014年8月25日07:52:37
* 作者:cutter_point
*/
#include"Handle.h"
#include"../require.h"
//定义Handle的接口
// struct Cheshire; //这个只是声明
struct Handle::Cheshire
{
int i;
};
// void initialize(); //初始化
void Handle::initialize()
{
smile=new Cheshire; //其实这个机构体就一个int的大小
smile->i=0; //大小初始化为0
}
// void cleanup(); //回收内存
void Handle::cleanup()
{
delete smile; //清除指针指向的结构
}
// int read(); //输出当前的数据
int Handle::read()
{
return smile->i; //返回当前指针指向的对象的值
}
// void change(int); //改变当前的值
void Handle::change(int x)
{
smile->i=x;
}
测试文件
/**
* 功能:包含具体实现的结构体被隐藏在实现文件中
* 时间:2014年8月8日10:08:19
* 作者:cutter_point
*/
#include"Handle.cpp"
int main()
{
Handle u;
u.initialize();
u.read();
u.change(1);
u.cleanup();
return 0;
}