CSDN博客

img owl2008

《c++ primer》读书笔记8

发表于2004/7/15 14:16:00  1288人阅读

大笑微笑生气吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头生气微笑大笑


偷笑我爱北京天安门偷笑


偷笑天安门上太阳升偷笑


偷笑伟大领袖毛主席偷笑


偷笑指引我们向前进偷笑

偷笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑偷笑

<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">笔记范围:</span><span lang="EN" style="FONT-SIZE: 15pt">2.5</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节</span><span lang="EN" style="FONT-SIZE: 15pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 15pt"><span style="mso-spacerun: yes">&nbsp; </span><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 30pt"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">随着这本书的深入,越来越发现自己对</span><span lang="EN" style="FONT-SIZE: 15pt">c++</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的理解是多么的浅薄,现在的我对于这些笔记真是诚惶诚恐,要知道这些自以为是的理解也许在今后的某个日子里信手翻阅,恐怕自己都会问。这些废话是那个笨蛋写的?简直一无是处,但是,我们的成熟正是来自这些一无是处的错误,作为初学者的我,希望在这里留下学习的思维旅程,不管自己的水平如何。这本笔记我还是会坚持,</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 30pt"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之所以说上面那些感言,是因为自己觉得到了本节,作者将带领我们超越我们还有待深入理解的</span><span lang="EN" style="FONT-SIZE: 15pt">oo</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,关于泛型的讨论在各个技术社区随处可见,对于初学者来说,很少能看得懂这是在说什么?这无疑是个神秘的,令人恐惧的领域。然而,正如上节一样。跟着作者的思路我们不难理解泛型设计给程序员带来的好处,在读完作者行云流水般的讲述之后,回过头来看看自己真的理解了那些东西?结果是令人遗憾的,在读到第六章之前,我对这块总是疑问不断,主要如下:</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 30pt"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">什么是泛型?只是模板吗?至少在本节范围内看来几乎是这么回事,为了提高代码的通用性,将数据类型参数化,让该代码的用户(本身也是编程者)决定类实例的数据类型,就这么简单?就从模板设计后对编译速度的影响,我们就可以肯定显然不是这么简单,以我们现在的水平无法真正回答这个问题,但是我们必须清楚的是:泛型设计不等于模板设计和简单的实例化类和函数。而模板一定是泛型设计的基础。</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 30pt"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我的第二个问题是。泛型设计是完全一种高于</span><span lang="EN" style="FONT-SIZE: 15pt">oop</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的设计思想吗?我的感觉好像不是,从过程到基于对象到面向对象的努力方向几乎都是数据处理的相对独立性,考虑的是数据的相对安全,而我所理解的泛型设计(主要是模板的用法),几乎只是为了代码的通用性,当然更大可能是我对泛型的理解本身是个错误,可见在第一个问题没解决之前。这个问题无从谈起,但是对于这节内容来说,带着几个笨问题离开,总比自以为是的态度更有价值。</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 30pt"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当然,对于本节的内容,上面的那些牛角尖的事情不是完全必要做的。我们要掌握的是模板最基本的用法,以及模板在实例化过程中的一些编译期的特点,总结要点如下。</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 71.25pt; TEXT-INDENT: -41.25pt; tab-stops: list 71.25pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 15pt; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模板是对数据类型的参数化,说得非专业点,就是拿数据类型作“变量”,只不过在使用时,这些“变量”的值是类型而不是数据。比如:</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt"><span lang="EN" style="FONT-SIZE: 15pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>tenplate&lt;class xxx&gt; class A {…….};<o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt"><span lang="EN" style="FONT-SIZE: 15pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int main() {<o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt"><span lang="EN" style="FONT-SIZE: 15pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>A&lt;int&gt;<span style="mso-spacerun: yes">&nbsp; </span>obj;<o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt"><span lang="EN" style="FONT-SIZE: 15pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Return 1 ;<o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt"><span lang="EN" style="FONT-SIZE: 15pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 71.95pt; TEXT-INDENT: -60pt; mso-char-indent-count: -4.0; mso-para-margin-left: 1.14gd"><span lang="EN" style="FONT-SIZE: 15pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span></span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面的</span><span lang="EN" style="FONT-SIZE: 15pt">xxx</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是我所谓的“变量”,理论上可以是你喜欢的任何标识符(当然它得符合标识符的基本要求)。</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 71.25pt; TEXT-INDENT: -41.25pt; tab-stops: list 71.25pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 15pt; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模板实例化的过程书中讲的非常详细,我唯一能说的是,要仔细看,特别是对</span><span lang="EN" style="FONT-SIZE: 15pt">p42</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的内容(以第三版中文版为准)。</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 71.25pt; TEXT-INDENT: -41.25pt; tab-stops: list 71.25pt; mso-list: l0 level1 lfo1"><span lang="EN" style="FONT-SIZE: 15pt; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于</span><span lang="EN" style="FONT-SIZE: 15pt">oo</span><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的模板支持,在理解前面的内容的基础上,这几乎没什么难度,值得看看的是作者的代码。恐怕在国内教材里没有什么地方能找到如此优雅,聪明的代码了。这本书中代码哪怕只是抄一遍,也是好处不可估量的。呵呵。</span><span lang="EN" style="FONT-SIZE: 15pt"><o:p></o:p></span></p>
0 0

相关博文

我的热门文章

img
取 消
img