需求:
1)安全技术安全的需要。即使核心实现封闭在库中不可见,但是头文件中的变量定义仍然会曝露一些内部信息;
2)节省编译时间的需要。在开发设计初期,实现部分需要经常变动,连头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,有时候导致编译时间过长。
方案:
句柄类可解决上述问题:
//:HANDLE.H -- Handle Classes
#ifndef HANDLE_H_
#defineHANDLE_H_
classhandle{
structcheshire;//Class declaration only
cheshire*smile;
public:
handle( );
void doit( );
~handle( );
};
#endif//HANDLE_H_这是所有客户程序员都能看到的,其中struct cheshire是没有完全指定的类型说明或类说明,将用来存放真正的变量。它告诉编译器, cheshire是一个结构的名字,但没有提供有关该结构的任何东西。这对产生一个指向结构的指针来说意见足够了。
在这种技术中,包含具体实现的结构主体被隐藏在实现文件中。
//:HANDLE.CPP -- Handle implementation
#include"handle.h"
//Define handle's implementation
structhandle:cheshire{
inti;
};
handle::handle(){
smile=(cheshire*)malloc(sizeof(cheshire));
smile->i=0;
}
voidhandle::doit(){
//do something with i
}
handle::~handle(){
free(smile);
}
句柄类的使用就像任何类的使用一样,包括头文件,创建对象,发送信息。但是通过这样的设计,即隐藏了变量的设计,也使得实现作变动时无需重编译头文件。Bruce说虽然这并不是完美的信息隐蔽,但毕竟是一大进步。
原文链接: https://www.cnblogs.com/makesunny/archive/2012/10/14/2723227.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/65739
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!