⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_关键字static总结第一次在csdn写的,请大家指点点(错误和不足)之二.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            size=3>//////////////////////////////////////////////////////////////////////////<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3>class Singleton{<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><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; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>static Singleton* 
            Instance();//注:静态成员函数返回类的实例<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>virtual ~Singleton(){};<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3>protected:<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>Singleton(){};<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><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; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>static Singleton* 
            _instance;//注:静态成员变量指向类的实例<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><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; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><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; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3>Singleton* Singleton::_instance = 
            0;//静态成员变量的初始化<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3>Singleton* Singleton::Instance()<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>//返回指向类实例的静态指针<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><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; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>if(_instance == 
            0)<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>_instance = new Singleton;<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>return 
            _instance;<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><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; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><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; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN 
            style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3>静态成员函数加静态成员变量便可实现单件模式,其中静态成员函数控制返回类的实例,因为静态成员函数不能为虚函数,因此子类就不能多态的对它进行重定义,这就保证了只能过此接口对类进行使用。用静态成员变量指向那个唯一被实例化的对象,当然最实始被初始化为<SPAN 
            lang=EN-US>0,然后使用惰性初始化时行实例的建立,<o:p></o:p></SPAN></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><FONT 
            size=3><SPAN 
            style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">如果将这些换成全局静态对象和全局静态函数,相信会有不少问题存在</SPAN><SPAN 
            lang=EN-US 
            style="FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 宋体; mso-ascii-font-family: 宋体; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><SPAN 
            style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</SPAN></SPAN><SPAN 
            lang=EN-US 
            style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">.<o:p></o:p></SPAN></FONT></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>3.</FONT><SPAN 
            style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; 
            </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"><SPAN 
            style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"><FONT 
            size=3>大家都知道,大家都知道,引入全局数据确实在适当的时候能解决一些棘手的问题,但全局数据是跨文件作用域,使得变量的正确初始在有些情况下非常难控制(后面第<SPAN 
            lang=EN-US>4点将会讲到),全局变量一旦建立,要消除它是相当难,随着而来便是”名字空间污染”问题,不仅如此,全局变量将变量(对象)和算法代码绑定在一起,使得复用又相当困难。<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-tab-count: 1">&nbsp;&nbsp;&nbsp; 
            </SPAN>对于全局变量所存在的这些问题,可以使用封装加静态访问的方法使问题得到优化<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 21pt"><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 18pt; TEXT-INDENT: 21pt"><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 
            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><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>bool g_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">&nbsp;</SPAN><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>int<SPAN 
            style="mso-spacerun: yes">&nbsp; 
            </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">&nbsp;&nbsp; </SPAN><SPAN 
            style="mso-spacerun: yes">&nbsp;</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">&nbsp;&nbsp;&nbsp; 
            </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">&nbsp;&nbsp;&nbsp; 
            </SPAN>static int<SPAN style="mso-spacerun: yes">&nbsp; 
            </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">&nbsp;&nbsp;&nbsp; 
            </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">&nbsp;&nbsp;&nbsp; 
            </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">&nbsp;&nbsp;&nbsp; 
            </SPAN>//....其它相关的函数<o:p></o:p></FONT></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -