📄 关键字static总结之一.htm
字号:
href="http://www.malegebide.com/article/5/11/2006/200608301352.html">有趣的Google..</A><BR>·
<A title=Google排名—搜索引擎登记技巧
href="http://www.malegebide.com/article/5/11/2006/200608301360.html">Google排名—搜索引..</A><BR>·
<FONT color=#0066ff>[图文]</FONT> <A title=菜鸟安全防患之饿死木马
href="http://www.malegebide.com/article/10/2006/200608291188.html">菜鸟安全防患..</A><BR>·
<A title=数学最大数字
href="http://www.malegebide.com/article/9/2006/20060827361.html">数学最大数字</A><BR>·
<A title=Google搜索技巧(6):用Google找自己
href="http://www.malegebide.com/article/10/2006/200608291195.html">Google搜索技巧(6):..</A><BR></TD></TR>
<TR>
<TD bgColor=#ffffff height=2></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=titleback1>相关文章</TD></TR>
<TR>
<TD vAlign=top height=100>· <A title=关键字static总结之二
href="http://www.malegebide.com/article/1/14/2006/2006092518449.html">关键字static总结之..</A><BR>·
<A title=虚拟设备驱动程序(VxD)设计中的两个关键问题
href="http://www.malegebide.com/article/1/14/2006/2006092517455.html">虚拟设备驱动程序(V..</A><BR>·
<A title="STL知识准备: 1. C++关键字typename"
href="http://www.malegebide.com/article/1/14/2006/2006092517411.html">STL知识准备:
1. C+..</A><BR>· <A title=优化了的过关键点的光滑曲线拟合算法的修正(一个链表的定义)
href="http://www.malegebide.com/article/1/14/2006/2006092517341.html">优化了的过关键点的..</A><BR>·
<A title=优化了的过关键点的光滑曲线拟合算法
href="http://www.malegebide.com/article/1/14/2006/2006092517309.html">优化了的过关键点的..</A><BR>·
<A title="GMPLS 的关键技术"
href="http://www.malegebide.com/article/45/2006/2006092517306.html">GMPLS
的关键技术</A><BR>· <A title=MPLS的研究发展及其关键技术综述
href="http://www.malegebide.com/article/45/2006/2006092517253.html">MPLS的研究发展及其..</A><BR>·
<A title=说说使用static和const关键字
href="http://www.malegebide.com/article/41/2006/2006092516379.html">说说使用static和co..</A><BR>·
<FONT color=#0066ff>[图文]</FONT> <A title=我对于关键字Ref和Out的理解
href="http://www.malegebide.com/article/41/2006/2006092515081.html">我对于关键字..</A><BR>·
<FONT color=#0066ff>[图文]</FONT> <A title="分享经验:Web 2.0 网站成功的关键"
href="http://www.malegebide.com/article/7/36/2006/2006091913737.html">分享经验:We..</A><BR></TD></TR></TBODY></TABLE></TD>
<TD class=tableright align=right width=588>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width=575 border=0>
<TBODY>
<TR>
<TD style="FONT-SIZE: 12pt; COLOR: #ff6600" align=middle
height=32>关键字static总结之一</TD></TR>
<TR>
<TD align=middle bgColor=#f7f7f7
height=25>作者:佚名 来源:不详 发布时间:25/09/2006
19:56:03 发布人:admin</TD></TR>
<SCRIPT language=javascript>
var newasp_fontsize=9;
var newasp_lineheight=12;
</SCRIPT>
<TR>
<TD>
<P align=right><A title=减小字体
style="CURSOR: hand; POSITION: relative"
onclick='if(newasp_fontsize>8){NewaspContentLabel.style.fontSize=(--newasp_fontsize)+"pt";NewaspContentLabel.style.lineHeight=(--newasp_lineheight)+"pt";}'><IMG
height=15 src="关键字static总结之一.files/1.gif" width=15 border=0><FONT
color=#ff6600>减小字体</FONT></A> <A title=增大字体
style="CURSOR: hand; POSITION: relative"
onclick='if(newasp_fontsize<64){NewaspContentLabel.style.fontSize=(++newasp_fontsize)+"pt";NewaspContentLabel.style.lineHeight=(++newasp_lineheight)+"pt";}'><IMG
height=15 src="关键字static总结之一.files/2.gif" width=15 border=0><FONT
color=#ff6600>增大字体</FONT></A> </P>
<DIV class=ContentFont id=NewaspContentLabel
style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"><FONT
id=font_word
style="FONT-SIZE: 14px; FONT-FAMILY: 宋体, Verdana, Arial, Helvetica, sans-serif">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3>static关键字如果不被引入C++语言,那就违反了C++设计中对低级语言设计支持规则中的”没有无故与C语言不兼容规则”,原因很简单,C语言中存在static并发发挥着它良好的作用,所以C++同样引入static应该是理所当然的,而实际C++的做法是不仅引入static,而且对它在面向对象程序设计中进行扩充(导入静态数据成员和静态函数成员的概念),这就使static的概念得到了扩展,对于其中较新的静态成员变量(对象)和静态函数成员则应该重点更理解,下面分别从static的作用,在C++中的分类,以及一些比较典型的应用三个方面进行总结一下<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3><SPAN style="mso-spacerun: yes">
</SPAN>一:静态(static)的作用<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3>首先,一个很明显的作用就是解决了全局部名字空间的问题,大家都知道全局变量是一处定义多处修改的,这当然是它的优势但,也确实解决了不少问题,但这对面向对象程序思想是相抵触的,它破坏的良好的封装性,污染了程序的名称空间,而对于这些缺点的,正是<SPAN
lang=EN-US>static能够解决的问题,我们可以在函数,结构,类中定义静态对象,当将变量定义为static时,编译器就会将变量的存储在程序的静态存储区(数据段)域而非普通的函数分配的栈空间上。<o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3>其次,<SPAN
lang=EN-US>static会将其修修饰的变量对象的可见性限制在本编译单元内(也就是后所以的具有文件作用域),使它成为一个内部连接。这与普通全局变量加入”extern”可以在多个文件中使用是相对应的。<o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3><SPAN style="mso-spacerun: yes">
</SPAN>二:静态(static)的分类<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3><SPAN style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-tab-count: 2">
</SPAN>目前在C++语言有五种静态对象的类别,分别为静态局部变量(对象),静态全局变量(对象),静态函数(静态全局函数),静态成员变量(对象),静态成员函数。<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3><SPAN style="mso-tab-count: 1">
</SPAN>静态局部变量,静态全局变量,以及静态函数的存在是对C语言兼容的结果,静态员成员变量是在C++引入类之后相对应存在的概念,静态成员函数则是为保持类的封装的前提下对静态成员变量进行更好方法而引入的一相概念,所以说静态成员函数就目前来讲是所以静态对象(包括C++所有的静态变量和静态成员函数)中最晚一个引入C++语言的。<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 39.0pt"><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体"><SPAN
style="mso-list: Ignore"><FONT size=3>1.</FONT><SPAN
style="FONT: 7pt ''''Times New Roman''''">
</SPAN></SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3>静态局部变量(对象)<SPAN
lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><FONT size=3><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">静态局部变量(对象)通也是指在函数中定义的静态变量(对象),当函数第一次被调用时,程序会为它在程序的数据段分配存储空间,并对它进行初始,当</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: ''''Times New Roman''''; mso-hansi-font-family: ''''Times New Roman''''">函数调用完成退出时</SPAN><SPAN
lang=EN-US>, </SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: ''''Times New Roman''''; mso-hansi-font-family: ''''Times New Roman''''">这个变量</SPAN><SPAN
lang=EN-US>(</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: ''''Times New Roman''''; mso-hansi-font-family: ''''Times New Roman''''">对象</SPAN><SPAN
lang=EN-US>)</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: ''''Times New Roman''''; mso-hansi-font-family: ''''Times New Roman''''">会保存此次函数调用后的状态</SPAN><SPAN
lang=EN-US>, </SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: ''''Times New Roman''''; mso-hansi-font-family: ''''Times New Roman''''">但不会被其它函数使用</SPAN><SPAN
lang=EN-US>, </SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: ''''Times New Roman''''; mso-hansi-font-family: ''''Times New Roman''''">当再次调用该函数时</SPAN><SPAN
lang=EN-US>, </SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: ''''Times New Roman''''; mso-hansi-font-family: ''''Times New Roman''''">并不为它分配空间和初始化,而是直接命使用上次调用的结果。看看下面简单的程序:</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
lang=EN-US><FONT
size=3>////////////////////////////////////////////////////////////////////////////////////////</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3>#include <iostream></FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3>#include <cstdlib></FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3>using namespace std;</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3>void foo(bool i)</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3>{</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN style="mso-spacerun: yes">
</SPAN>static int a=0;</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN style="mso-spacerun: yes">
</SPAN>int c=0;</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN style="mso-spacerun: yes">
</SPAN>if(i){</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN
style="mso-spacerun: yes">
</SPAN>static int b=0;</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN
style="mso-spacerun: yes">
</SPAN>++b;</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN
style="mso-spacerun: yes">
</SPAN>cout <<"b="<< b <<endl;</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN
style="mso-spacerun: yes">
</SPAN>}</FONT></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
lang=EN-US><FONT size=3><SPAN style="mso-spacerun: yes">
</SPAN>++a;</FONT></SPAN></P>
<P class=MsoNormal
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -