#ifndef HANDLE_H #define HANDLE_H //文件呗修改 或 所依赖的头文件被修改时 项目管理员 需要 重复编译该文件 //易碎的基类问题 //解决技术 句柄类 //1. 有关的实现消失 留下指针 指向一个结构 // 结构的定义与其所有的成员函数的定义一同出现在实现文件中 // 只要接口不变 头文件就不需要变动 实现部分可以按需更改 // 完成后只需要对实现文件重新编译 然后连接到项目中 // 头文件 之包含公共接口 和 一个单指针 该指针指向一个没有完全定义的类 class Handle { struct Cheshire; Cheshire * smile; public: void init(); void cleanup(); int read(); void change(int); }; #endif // !HANDLE_H
#include"Stash.h" struct Handle::Cheshire { int i; }; void Handle::init() { smile = new Cheshire; smile->i = 0; } void Handle::cleanup() { delete smile; } int Handle::read() { return smile->i; } void Handle::change(int x) { smile->i = x; }