📄 请问handle句柄是什么东东我在看书和程序是怎么也不明白!.htm
字号:
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
bobofu(有问题要问) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-08
16:57:00Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
句柄类(handle classes )
C + +中的存取控制允许将实现与接口部分分开,但实现的隐藏是不完全的。编译器必须知
道一个对象的所有部分的声明,以便创建和管理它。我们可以想象一种只需声明一个对象的公
共接口部分的编程语言,而将私有的实现部分隐藏起来。但C + +在编译期间要尽可能多地做静
态类型检查。这意味着尽早捕获错误,也意味着程序具有更高的效率。然而这对私有的实现部
分来说带来两个影响:一是即使程序员不能轻易地访问实现部分,但他可以看到它;二是造成
一些不必要的重复编译。
1 可见的实现部分
有些项目不可让最终用户看到其实现部分。例如可能在一个库的头文件中显示一些策略信息,但公司不想让这些信息被竞争对手获得。比如从事一个安全性很重要的系统(如加密算
法),我们不想在文件中暴露任何线索,以防有人破译我们的代码。或许我们把库放在了一个
“有敌意”的环境中,在那里程序员会不顾一切地用指针和类型转换存取我们的私有成员。在
所有这些情况下,就有必要把一个编译好的实际结构放在实现文件中,而不是让其暴露在头
文件中。
2 减少重复编译
在我们的编程环境中,当一个文件被修改,或它所依赖的文件包含的头文件被修改时,项
目负责人需要重复编译这些文件。这意味着无论何时程序员修改了一个类,无论是修改公共的
接口部分,还是私有的实现部分,他都得再次编译包含头文件的所有文件。对于一个大的项目
而言,在开发初期这可能非常难以处理,因为实现部分可能需要经常改动;如果这个项目非常
大,用于编译的时间过多就可能妨碍项目的完成。
解决这个问题的技术有时叫句柄类(handle classes )。有关实现的
任何东西都消失了,只剩一个单一的指针“s m i l e ”。该指针指向
一个结构,该结构的定义与其所有的成员函数的定义一样出现在实现文
件中。这样,只要接口部分不改变,头文件就不需变动。而实现部分可
以按需要任意更动,完成后只要对实现文件进行重新编译,然后再连接
到项目中。
这里有个说明这一技术的简单例子。头文件中只包含公共的接口和一个简单的没有完全指
定的类指针。
//HANDLE.H--Handle classes
#ifndef HANDEL_H_
#define HANDEL_H_
class handle{
struct cheshire;//Class declaration only
cheshire* smile;
public:
void initialize();
void cleanup();
int read();
void chang(int);
};
#endif // HANDEL_H_
这是所有客户程序员都能看到的。这行
struct cheshire;
是一个没有完全指定的类型说明或类声明(一个类的定义包含类的主体)。它告诉编译器,
cheshire 是一个结构的名字,但没有提供有关该结构的任何东西。这对产生一个指向结构的指
针来说已经足够了。但我们在提供一个结构的主体部分之前不能创建一个对象。在这种技术里,
包含具体实现的结构主体被隐藏在实现文件中。
这是Thinking in C++中的描述。我认为很清楚。具体参阅该书第三章。
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
gisfan(葫芦弟兄) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-08
21:20:00Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
看charles Petzold的《WINDOWS PROGRAMMING》,北大出版社
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
CandyCat(苯苯猫) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-09
00:18:00Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
To bobofu(有问题要问)
请问你有Thinking in C++的中文电子版吗?在哪里能下载呢?谢谢你!
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
classfactory(贾迎乐) </B></FONT><FONT color=#000000>( ) 信誉:100
</FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-09
12:49:00Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
To CandyCat(Candy):
你说的那些是属于“内核对象”,但是象窗口、菜单这些东西是属于“用户对象”的,他们的管理和访问控制是完全不同的。
HANDLE具体是什么东西,取决与对象的存储方式。学过数据结构的人都应该清楚,多个同类对象的存储方式最常用的有两种:数组和链表。这两种方式各有优缺点,具体我就不再说了。根据《核心编程》这本书的说法(我没试过),内核对象似乎是采用数组方式,因此HANDLE就是数组索引。而对于用户对象,根据我的分析和一些书上写的,应该采用的是链表方式(因其动态性能较好)。所以在这里,HANDLE就是对应结构的指针了。
关于数组和链表,都是老土的东西了,如果你还是不懂的话我可没办法了。 :)
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
hcphcp(小四:君子一言) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-09
13:52:00Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
我KAO
你们怎么懂这么多:)
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 bgColor=#f1f5fa></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B>
bobofu(有问题要问) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-10
16:00:00Z </FONT></TD>
<TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT
color=#000000>0</FONT> </TD></TR>
<TR>
<TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR>
<TR>
<TD><FONT color=#ffffff>?</FONT></TD>
<TD colSpan=3><PRE>
to CandyCat(Candy) --http://louisxiv.home.chinaren.com/
不过建议买本书看,电子版看起来太累。
</PRE></TD></TR>
<TR>
<TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A
href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT
color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
<TR>
<TD colSpan=4 height=5></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=580 border=0>
<TBODY>
<TR>
<TD width="100%" bgColor=#999999 height=1></TD></TR>
<TR>
<TD width="100%"><BR>结贴 </TD></TR>
<TR>
<TD width="100%"
height=10></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER>
<SCRIPT language=javascript src=""></html></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -