句柄类
来源:互联网 发布:电脑服务网络怎么办 编辑:程序博客网 时间:2024/06/11 03:51
c++中的访问控制(public,protected,private)允许将实现与接口部分分开,但实现部分的隐藏是不完全的,比如在private和protected区域的数据成员直接暴露在外面,可以被最终客户程序员直接看到所有的数据成员;另外如果一个程序员无论何时修改了一个类,无论修改的是公共接口部分还是私有成员的声明部分,他都必须再次编译包含头文件的所有文件,这就是易碎的基类问题(fragile base-class problem)。。
解决这个问题的技术被称为句柄类(handle class)或“Cheshire cat”。原理是把要隐藏的数据成员放在一个结构中,在类的声明中只给出该结构的声明以及一个指向该结构的指针,该结构的定义与其它所有的成员函数的定义都放在实现文件中。这样,只要接口部分不改变,头文件就不需要变动,而实现部分可以按需要任意更改,完成后只需要对实现文件重新编译,然后重新连接到项目中。
举例:
//在头文件中只放公共接口和一个指针#ifndef HANDLE_H#define HANDLE_Hclass handle{ struct Cheshire; Cheshire *smile;public: void initialize(); void cleanUp(); int read(); void change(int x);};#endif // HANDLE_H
//在实现文件中放置具体的实现#include "handle.h"struct handle::Cheshire{ int i;}; void handle::initialize(){ 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;}main函数:
#include<iostream>#include "handle.h"int main(){ handle h; h.initialize(); std::cout<<h.read()<<std::endl; return 0;}
注意:Cheshire是一个嵌套结构,所以它必须用作用域符(::)定义。
这样,客户程序员就只能唯一访问的就是公共的接口部分,因此如果只修改了在实现中的部分,上面文件就不必重新编译。
阅读全文
0 0
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄类
- 句柄和句柄类是不同!
- VC数据类型(句柄类)
- 句柄类例子
- C++句柄类
- 理解句柄类
- 07.js.Switch语句,自增自减运算
- AOP用法实践
- 解决android Button 自带阴影效果另一种办法
- 又一家公有云巨头推出NAS存储服务,传统NAS厂商要被碾压
- 用RYU实现集线器功能
- 句柄类
- 清华大学2003年机试-球的半径和体积-1068
- 程序员编程生涯中会犯的7个错误
- [Linux] OpenSSH 升级
- websocket @ServerEndpoint注解形式开发 @OnOpen 如何获取httpSession
- java是否为空的判断的例子
- 08.js.while循环
- 来自数据库的大数据预处理Python机器学习篇(一)
- 使用 delve 调试 golang 程序