📄 关键字static总结之二.htm
字号:
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3><SPAN style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>int<SPAN
style="mso-spacerun: yes">
</SPAN>g_size;<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-spacerun: yes"> </SPAN>const char*
in_modulename;<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><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"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT
size=3>class Global<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>{<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>private:<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 bool s_flag_;<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 int<SPAN style="mso-spacerun: yes">
</SPAN>s_size_;<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 const char*
s_in_modulename_;<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>private:<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>Global();//私有的构造函数,使类不能实例化<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>//....其它相关的函数<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>public:<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>//存入相关值<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 void setFlag(bool flag){ s_flag_ = flag;
}<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 void setSize(int size) { s_size_ = size;
}<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 void setInmodulename(const char* in_modulename){
s_in_modulename_ = in_modulename; }<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"><o:p><FONT
size=3> </FONT></o:p></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>//取得相关值<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-spacerun: yes"> </SPAN>static int
getFlag() { return s_flag_; }<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 int getSize() { return s_size_;
}<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 const char* getInmodulename() { return
s_in_modulename_; }<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>};<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><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 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; 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>4.</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-ALIGN: left; mso-layout-grid-align: none"
align=left><FONT size=3><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">如果你让对象</SPAN><SPAN
lang=EN-US>A</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">必须在对象</SPAN><SPAN
lang=EN-US>B</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">之前初始化,同时又让</SPAN><SPAN
lang=EN-US>A</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">的初始化依赖于</SPAN><SPAN
lang=EN-US>B</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">已经被初始化</SPAN><SPAN
lang=EN-US>,</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">同是</SPAN><SPAN
lang=EN-US>A,B</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">又在不同的编译单元,<FONT
id=fummmlqflcijrrsdps>r,;cb6J=}&专:提CP件Th</FONT>这是我们就无法控制正确的初始化顺序,解决办法还是有的(<B
style="mso-bidi-font-weight: normal">注,以下直入引用《</B></SPAN><B
style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>think in
C++</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">》的一段例子,由于是总结,拷贝一段没问题吧</SPAN></B><B
style="mso-bidi-font-weight: normal"><SPAN lang=EN-US
style="FONT-FAMILY: Wingdings; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><SPAN
style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</SPAN></SPAN></B><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: ''''Times New Roman''''; mso-ascii-font-family: ''''Times New Roman''''">)</SPAN><SPAN
lang=EN-US>,</SPAN></FONT><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 仿宋_GB2312; mso-font-kerning: 0pt">
<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left><FONT size=3><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 仿宋_GB2312; mso-font-kerning: 0pt">这时我们可用由</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Jerry
Schwarz</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 仿宋_GB2312; mso-font-kerning: 0pt">在创建</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">i
o s t r e a m</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 仿宋_GB2312; mso-font-kerning: 0pt">库(因为</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">c
i n , c o u t</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 仿宋_GB2312; mso-font-kerning: 0pt">和</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">c
e r r</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 仿宋_GB2312; mso-font-kerning: 0pt">的定义是在不同的文件中)时提供的一种技术。这一技术要求在库头文件中加上一个额外的类。这个类负责库中静态对象的动态初始化。下面是一个简单的例子:<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 仿宋_GB2312; mso-font-kerning: 0pt"><FONT
size=3>//DEPEND.H – Static initialization
technique<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>#ifndef DEPEND_H_<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>#define DEPEND_H_<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>#include <iostream.h><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -