CPrimer答客问(侯捷).doc_第1页
CPrimer答客问(侯捷).doc_第2页
CPrimer答客问(侯捷).doc_第3页
CPrimer答客问(侯捷).doc_第4页
CPrimer答客问(侯捷).doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

发信人: Heavywind (你把我灌醉), 信区: Program 标 题: C+ Primer 答客问(侯捷) 发信站: 栋力无限 (Sun May 6 23:41:11 2001), 转信 C+ Primer 答客问 (1) 1999.10.03 Don wrote (1999/10/02): 侯老师! 我是一个 C+ 初学者,听说 C+ Primer 这本书不错 於是就买了您的大作,但是: 一、这本书一开始我就看不懂了! 尤其第二章,那是必需先有一些基本知识的人才看得懂的! 侯捷回覆: 第二章章名纵览 C+,是让你对 C+ 的特性做一个总览。 本书前言 p.xv 第二段(我还特别 highlight 起来)说: - quote(前言 p.xv)- 第二章的配速有点快,部份读者可能会觉得无法负荷。如果是这样, 我建议你不妨跳着读,稍後再回头仔细看。 - unquote - 本书第一篇 p.2 又说: - quote(p.2)- 在第一篇中,我对整个 C+ 语言做了快速的浏览。我的目的 是提供语言特性的导入,如此一来我们就可以在完全面对这些 性质之前,比较无拘无束地取用其中一些观念。例如,在第 13 章 之前我们并不会细看 classes,但如果等到那个时候才谈及 classes,我们会有很多难以表现的或不恰当的程式实例。 对整个语言先做一次浅尝之旅的第二个理由是基於美学的考量。 除非你先让自己曝露於贝多芬奏鸣曲所呈现的美感与复杂度之下, 否则明显无关联的细节如升半音、降半音、八度音阶、和弦等等 必定令人呵欠连连。但是在精通那些细节之前,我们又没有办法 做音乐。程式设计也一样,踩踏着迷宫般的运算子优先权 或标准算术转换规则,对於精通 C+ 程式设计而言,是一种 必要(但也一定令人生闷)的基础。 - unquote - 此外本书第一篇 p.3 最後一段说: - quote(p.3)- 部份读者可能会认为,第章过於粗糙,许多呈现出来的素材并 没有完整的介绍。完整的介绍其实出现在後继各章中。如果你发 现自己开始有点被淹没或难以忍受的感觉,我建议你略读本章就 好,或甚至跳过。直到你对那些素材更加熟悉,再回头重读这一 部份。第章起,我要展开传统的叙事体步调;对第章适应不 良的读者,我建议在这里整军经武,重新出发。 - unquote - Don wrote : 二、我所使用的是 VC+5.0 里面的程式码,几乎是都不能 compile 过的 像是 string abc 之类的宣告不能用 complex 的宣告也不能用! 我都搞不清楚是谁的错,mcrosoft 还是 C+ sandard ! 但是重点是在,我不能使用来写能用的程式啊! gc+是否有相容性比较高呢? 请看这个没有错误的程式 : / BCB : bcc32 test.cpp / VC : cl -GX test.cpp #include #include #include using namespace std; void main() string abc = this is a test; cout abc endl; / a pure imaginary number : o + 7i complex purei(0, 7); cout purei endl; 我猜你没有加上 using namespace std; 这一句。 本书导读 p.19 的 ,我列了三项, 其中第二项说: - quote(p.19)- 您可能需要为许多程式加上一行 using directive std;(其意义 请叁考 8.6.4 节),可加在所有 #include 指令之後。 - unquote - 而 8.6.4 节的最後一段指出: - quote(p.441)- 本书之中,为了保持程式码的精简,同时也因为许多实例是在 未支援 namespaces 的编译器上编译,所以我并未在程式码中 明白显示必要的 using declarations。我假设程式码中应该 都有针对 namespace std 成员所需要的 using declarations。 译注:读者如果想要编译本书所附之范例程式码,请特别注意这一点。 - unquote - 你询问各编译器对於 C+ Standard 的相容性。我想除了 template 以及 STL 两部份外,各家编译器对 C+ Standard 的支援程度都是差不多的。至於这两部份,我先前在 CompBook 版上 的文章曾经提醒过大家。 对C+ Primer 中文版(侯捷译/ 峰/1999)的任何问题, 欢迎来信(或版上公开)讨论。如果您是初学者,不具备跳跃阅读 的能力,我希望您按照书籍的阅读动线,仔细阅读,然後才提出问题。 谢谢。 - the end C+ Primer 答客问 (2) 1999.10.11 Yi-Lun Chen wrote (1999/10/11): 侯 Sir: 在您所译的C+ Primer的p.24的倒数第6以及第13行中, 您所提到的维数好像有点怪怪的,那一个Array不是 一维(one dimension)的Array吗? 可能改成项数会清楚一点吧._ ps.因为手头上面没有原文的primer(想说有侯Sir翻译 就不用买了.:p)所以并不清楚原文所用的单字,如果 真的是用dimension或者其他同义的字,侯Sir就当我 在耍笨好喽.:) 侯捷回答: 谢谢您的来信。原文确为 dimension,通常译为维。在 C+ Primer 书中,作者把 ia9 的 9 称为 dimension, 把 ia34 称为 two-dimensional array(两个维度的阵列, 见 3.9.2 节)。由於我们通常习惯把两个维度的阵列 简称为二维阵列,致引起文字上的混淆。 为了区分两者,我在C+ Primer 中文版把 ia9 的 9 称为维数或维度值;把 ia9 称为一维阵列,拥有 一个维度;把 ia34 称为二维阵列,拥有两个维度; 把 ia345 称为三维阵列,拥有三个维度。这个作法 不甚理想,而且可能亦未全面实现而有漏网之鱼。 Previn wrote : (1998/10/12) dimension 在数学上称作维度没错,但在英文中 也当作尺寸解,後者也许更常用。在翻译时一 定要看上下文,否则就会翻错。我个人认为 维数 还是不妥,它不管怎麽看都是 有多少 个维度 的意思,不知侯大师以为然否? 请千万别称呼我大师。 您说的很对。我在翻译过程中一时拘泥,译得不好。 我将全面检讨本书有关於 dimension 的译词, 并想办法更正。谢谢您。 * * * * * * * * * * * * * * * * by the why,说点题外话。 说到书籍内容更正,有两种作法,一是在网际网路上做个 专属勘误网页,让大家上去看。例如C+ Primer 中文版 的勘误网页放在 。这是比较即时 的作法。另一个更理想更负责的作法是在新刷中更正。 不过,理想与现实之间需要一点协调。书籍的制作是这样 的,制版与印刷时,是以台(8 或 16 页)为单位。 因此,每换一页,同台的各页统统要换过。这便造成成本的 大幅增加。 以前,我从不管什麽成本不成本,只要我认为书籍内容有 修改必要,即使只是某个字词用得不甚理想,我都会请 出版社更新。出版社也都全力配合(这一点让我非常感谢)。 慢慢地,我的行事不再这麽霹雳,我觉得我多少也要站在 出版社的立场想想。所以我打算,如果是关系到对错正误的 根本性问题,我便一定在新刷修正。如果是易判断的错别字 或排版误失或用词不很恰当等等,我便先在勘误网页上明载, 但不求立刻於新刷中更正。待收集来的这类误失较为密集了, 才一并於下一刷修正。 哪些是新刷已修正的,哪些是暂请读者自行动手更改的, 我会在勘误网页上很清楚地说明。 这是个便宜作法,请读者见谅。谢谢。 - the end C+ Primer 答客问 (3) 1999.10.11 Allan wrote (1999/10/10): 侯 sir 您好: 我现在正在研读您译的 C+ Primer。对於书中 118 页 3.9.1 节 最後一段的叙述有点疑问。书上说 ia 是一个二维阵列,而 ia1,2 即为 ia2。我的疑问是: (1) ia 明明是二维阵列,写 ia2 合法吗? (2) 书上说 ia2 所存取到的是 ia 的第三个 row 的第一个元素。 这意思是指 ia20 吗?难道说: int ia43 = . ; / (a) ia1,2 = 5; / (b) 第二行的意思是 ia20=5 吗? 侯捷回答: (1) ia2 是合法的,表示 &(ia20)。就好像面对 一维阵列 int ia10; 我们可以 ia 代表 &(ia0) 一样。 (2) 书上的文字有点容易引起误会。我们不能只给定一维索引, 就想选定二维阵列的某个元素。你所举的 (b) 式会出现编译错误。 书上的意思其实就是上述 (1) 的意思。 写个小程式瞧瞧: #include void main() int ia23 = 0, 1, 2, 3, 4, 5 ; / 可视为两个次阵列的组合 cout ia12 endl; / 5 cout ia endl; / 0x0063FDE0 cout &(ia00) endl; / 0x0063FDE0 cout &(ia12) endl; / 0x0063FDF4 cout ia1, 2 endl; / 0x0063FDF8, 等於 ia2 cout ia2 endl; / 0x0063FDF8, 等於 &(ia20) / 表示第二个次阵列的起始点 cout &(ia20) delete 1. 翻译原文书,不免翻译出来的文句太生疏了,即使侯 Sir 在最近 一本翻译书已经把大部分的原文名词保留,但我认为还是有一些 语句翻的太难懂它的意思了.也许我的中文造诣太差了吧 delete 侯捷回覆: 我同意,有些英文句子再怎麽修润,也不好看。我认为这是 原作者本身的思考方式与写作技巧的问题。举个例子,最近我 检阅C+ Primer 中文版,看到 p.107 最後一段,觉得 思路打结。此段前後文主要是说,如欲将一个 object 当做 某个 reference 的初值,而两者型别不同(但可转换),那麽 这个 reference 必须是个 const reference 才行: double dval = 3.14159; const int &ri = dval; / legal for const reference only! 书中花了一些篇幅讲编译器内部动作,以解释为什麽只有 const reference 才合法。p.107 最後一段说: - quote(p.107)- const references 并不会出现这样的问题,因为它们是唯读的。 所以,(1) 不允许 non-const references 代表那些需要暂时 替代品之 objects 或数值,或是 (2) 允许 reference 被定义 但却无法有效运作,哪一种作法比较好?当然前者才是好的解决方案。 - unquote - 看到这里,真的脑筋有点打结,因为作者把文字用得太复杂了。 於是我在手上这本书另外写一段话,清楚而漂亮(我自认为) 地解释必须是 const reference的原由。 可是我不能把我的这段文字取代原作者那段我认为过於复杂的说明。 那样一来我这个译者就太富侵略性了 :) 所以我同意 wenij 说有些语句翻得太难懂它的意思了, 不过我认为(以此例而言)无关读者的中文造诣或译者的 中文造诣,是原作者的思路与文字表达问题。 - the end C+ Primer 答客问 (5) 1999.10.11 dyliu wrote (1999/10/07) 大致看了一下前面的导读、前言与目录,第三版 看起来可以说完全是一本新书了,整个书的编排 强调 C+ 的 multiple programming paradigm, 不过小弟认为 generic algorithm 应该独立成为 一篇而不是放在 procedural-base programming 之下,因为 generic programming 可说是另一种 progamming paradigm. 侯捷回覆: 完全同意。我更希望作者多写些 generic programming 主题的内容。但如此一来此书就更厚了。两难! 我目前对 generic programming 很感兴趣,看过: 1. STL Tutorial and Reference Guide 2. Data Structure in C+ - using the STL 3. Designing Components with the C+ STL 4. Generic Programming and the STL 都是 Addison Wesley 出版。其中 (1) 太陈旧 (2) 是 学院派教科书 (3) 太简陋,文笔编排不理想。(4) 虽稍深, 对 generic programming 的理论、概念、实作都有不错的 涵盖。我希望近日能拨空写一篇书评,详细检讨这四本书。 dyliu wrote : ps. 导读第 19 页,范例程式注意事项第二点 usng directive std; 应为 using namespace std; 之误. 我要表达的确是 using directive std,但我用的字形 以及前後文字,容易造成误会。所以如你所言直接写为 程式码 using namespace std; 确是比较好。谢谢。 yzchen wrote (1999/10/11) : 推荐 another must-have STL book by AW: The C+ Standard Library: A Tutorial and Reference jjhou wrote (1999/10/18) : yzchen 兄可否告知哪里购得: The C+ Standard Library: A Tutorial and Reference 一书?如有阅後心得可否与大家分享?谢谢。 yzchen wrote (1999/10/19) : 在 A 七折时买的, 现在好像没打折了:) 这本书在 A 评价是五颗星. 这本书大概分三部分. chap14 介绍学习 STL 不需知道的东西, such as namspace, explicit keyword, utilities.etc. chap59 进入 STL 重心, 包括 containers,algorithms,iterators, function objects. chap10the end 介绍 special individual class, such as i/o, string, special containers, allocators.etc. 全书约 800 pages.虽然 author 说他并无 cover all of the STL. but 其实已经够了! 目前我大概浏览一下 chap14, 觉得这本书非常可读, 最重要的是作者 是德国人, 书中几乎很少有生字 or 难以理解的英文句子. 很容易理解 what he has said. - the end C+ Primer 答客问 (6) 1999.10.11 sbb wrote (1999/10/11) Dear 侯老师: 在您译的c+ primer第627页13.3.2节中, 曾经提到copy() 这个函式中为什麽能取用 外传进来的private data member 的问题, 说会在後一节中有详细介绍, 但我念完後一 节後, 问题在是在耶 ? 就如同下面那个范例 是大部分c+教课书中所使用的, 但为什麽 void add_dist这个函式可以直接使用外传进来 d2 的private data member 如 d2.inches 呢 ? 这样不就违反了encapsulate的规则了吗 ? 还有就是能不能请问您 private member 真正 的定义呢? 您在书中只提到只能够被member functions 存取, 或是被其class 的 friends存取 . 但这是一般情况, 若是外传进来的同一种class的不同object,为什麽可以取得呢? 而且我试过各种c+ compier都可以compile耶. 烦请您帮学生解决, 这问题己经困援学生多年, 只有您这本书有提到这个问题, 但是学生 对於答案还是有点疑问, 谢谢. 学生 sbb class Distance private: int feet; float inches; public: Distance() : feet(0), inches(0.0) Distance(int ft, float in) : feet(ft), inches(in) void add_dist(Distance d2,Distance d3) inches += d2.inches + d3.inches; feet += d2.feet + d3.feet; ; int main() Distance dist1, dist3; Distance dist2(11,6.25); dist3.add_dist(dist1,dist2); return 0; 侯捷回覆: 你这个例子和 C+ Primer p.627, 13.3.2 节的例子类似, 那麽就拿你的例子来说好了。你问: 为什麽 void add_dist() 这个函式可以直接使用外传进来 d2 的 private data member 如 d2.inches 呢 ? 这样不就违反了 encapsulate 的规则了吗 ? 要知道,add_dist() 是 class Distance 的 member function 呀, 它的全名是 Distance:add_dist(),它当然有权处理 class Distance 的任何 data members。这并没有违反封装性质,对不! 还有就是能不能请问您 private member 真正 的定义呢? 您在书中只提到只能够被member functions 存取, 或是被其class 的 friends存取 . 但这是一般情况, 若是外传进来的同一种class的不同object,为什麽可以取得呢? 因为上述的 add_dist 是 class Distance 的 member function 呀。 你在 main() return 前加上一行试试: cout dist3.feet endl; 你会发现这一行过不了关,VC 的错误讯息如下: C2248: feet : cannot access private member declared in class Distance 你看,class Distance 的 private data member feet 不能够被 cout 的 operator 请问:对於完全没有学过程式设计的人 适不适合直接由这本书开始 再问:配合这本书的 compiler, 以下何者较为适当? 1. DOS + Turbo C+ 3.0 2. Win98 + VC+ ? 3. Win98 + BC+Builder ? petz wrote (1999/10/13): 我个人认为不适合, 初学者还是别看大部头的书. 虽然大部头的书巨细靡遗, 但是得有耐心慢慢看完. 先了解C+的语法之後, 再细读会比较好. MIKECHANG wrote (1999/10/13) : 我也是这样觉得.但原因并不是因为这是大部头的书. 侯杰自己也说这可当作第一本学习C+的书, 但是不适合做 学习程式设计的书. 侯捷回覆: 喔不,那是作者说的,不是侯捷说的: - quote(前言 xiv)- 这是一本入门书籍., 但它并不是一本最简单或最温和的 C+ 语言书.。虽然某些 高阶主题对初学者而言难度颇高,但我相信,如果要培养对 C+ 语言的确实认识,这样的涵盖范围有其必要性。面对这些素材, 读者应该不时回头消化咀嚼,而不是一次就想把它囫囵下咽。如果 一开始你觉得有点无法接受,或是呼吸急促、口乾舌燥,那麽不妨 暂时放下,稍後(日後)再回头重看。我把这样的章节以 (A) 标示 出来。 阅读此书并不需要以 C 语言做为基础。不过,熟悉某些结构化语言 可以让你前进得更轻松些。这本书是以你的第一本 C+ 书籍为 目标而写,但它不应该是你的第一本程式设计书籍! - unquote - MIKECHANG wrote : 若你之前学过C or pascal等procedure programming language 的话还可以, 啥都没学过就用这本书来学习C+的话会很累很累. 讲得对初学者而言有点太过深入了. 可能很多人的疑惑是,是否必须先学 C 再学 C+? 这得先厘清大家所说的 C 和 C+ 究竟是指的什麽。如果所谓的 C 指的是基本资料型别、算式(expressions)、述句(statements)、 函式(functions)、生存空间(scope)和生命周期(lifetime)观念, 而所谓的 C+ 指的是 classes、objects、overloading、 polymorphism、exception、template、RTTI 、namespace等, 那麽我认为学 C+ 之前必须先学 C。 但如果所谓的 C+ 指的是广义的、全貌的 C+,那麽 C+ 里头 根本就涵盖 C,也就没有学 C+ 之前必须先学 C的道理了。 C+ Primer 中文版是一本 C+ 全貌型书籍,其中第 3,4,5,7,8 章可归纳为 C 的部份(虽然比传统的 C 多一点点扩充)。 MIKECHANG wrote : ps. 侯杰网站上面对这本书的读者技术基础定位在基本电脑知识, 个人觉得光只有这样的基础, 学起来可能有点困难. 又说这可以是你的第一本 C+ 学习用书,但不应该是你的 第一本程式设计学习用书。 有点矛盾乎?! 前者是侯捷说的,後者是 Lippman & Lajoie 说的。所谓矛盾是 以子之矛攻子之盾,不同人的不同看法,不算矛盾 :) 到底我所谓 基本电脑知识, 是怎样的知识呢?这个嘛, 说也说不周详。 本书从未教读者在任何特定编译器上的编译程序,也没有教 读者如何设定编译环境。更没有一一说明它的范例程式在什麽 样的编译平台上需要什麽样的修补。这些知识该归类为什麽呢? (我突然想,是不是应该在导读中加上关於 C+ 编译器 一节,对初学者比较更好些!请叁考拙作 【在 console mode 中使用 C/C+ 编译器】一文) 念国一的 子正在向我学习 C+ programming。一开始 没有适当教本,我先以自制讲义及多型与虚拟,让 他有大局观。C+ Primer 中文版出版後,便改用它 密实地重新开始。C+ 是我这 子的第一个程式语言, 他的接受度不错。 但,我相信大半因素是因为他有一位不错的老师 :),可以 随时为他解惑。以他的条件而言,自修本书恐怕是不行的。 这是一个 13 岁小男孩的情况。16 岁呢?19 岁呢?25 岁呢? 30 岁呢?从别的专业领域转进 programming 领域的呢? 事实上,每个人的情况都不相同,无法一概而论。同样是初学者, 有的人已经习惯看大部头书,也习惯自修自学,又有动手的好习惯, 练就一身铜筋铁骨,可以在热带丛林中 都诿菰?奋力自强。有的人还未习惯看大部头书,也不习惯自修自学, 那就比较适合温室环境,徇徇诱导可也,太霹雳则水土不服。 作者的这段话我觉得满好: - quote(前言 xiv)- 读者应该不时回头消化咀嚼,而不是一次就想把它囫囵下咽。如果 一开始你觉得有点无法接受,或是呼吸急促、口乾舌燥,那麽不妨 暂时放下,稍後(日後)再回头重看。 - unquote - 再问:配合这本书的 compiler, 以下何者较为适当? 1. DOS + Turbo C+ 3.0 2. Win98 + VC+ ? 3. Win98 + BC+Builder ? 我觉得(1)不合适, 因为TC+3.0与书中的ANSI C+差太多了. 後两者虽没有完全支援ANSI C+, 但也比(1)好太多了. 到以下网址看看(2)(3)两个compiler对书中范例程式的支援 /errata-cpp-primer.htm 说得好。 by the way,并不是愈新版本的编译器,对 C+ Standard 的 支援程度就一定愈好;有时会有倒退噜的情况。 Windows Development Journal()1999/10 p.65 便指出,BCB4 不支援 Nested Class Template。而这在早期的 Borland C+ v5 却可轻骑过关。 - the end C+ Primer 答客问 (8) 1999.10.17 Jimmy wrote (1999/10/15) : 侯先生您好: 我正在拜读您的译作 c+ primer。由於我对 STL 极感兴趣, 所以很快就跳到附录去看 generic algorithms 的范例。这样的范例 真的很棒,让我从一堆文字描述中直接跳脱出来,毕竟对 programmer 而言有实例说明实在是太好了。 但是我对於 p1130 的 copy_backward() 的描述有点不解。 书中文字所举的例子 0,1,2,3,4,5 经过演算法後的结果, 与下一段完整例子(操作对象是个 string 阵列)的结果 好像有点矛盾。我不确定是否我认知有问题。可否请您 检验一下。 p.s. 我很喜欢这本书,读起来很流畅。谢谢您的用心。 侯捷回覆: 您看书真仔细,一举便中本书要害。 是的,p.1130 copy_backward() generic algorithm 的文字说明中, 第二段叙述是错误的。我在翻译本书的过程中,没有能够挑出原文书 的这个大 bug,是我的失职。 有原文书的朋友也请注意,这个 bug 并没有出现在原文书 errata 中, 至少我上次(1999/08/10)看的时候没有。 本书出版後,我对附录中的所有范例程式做了一次检阅与测试, 这才测出您所指的这一段错误叙述。测试结论以及此段勘误 已载於侯捷网站 之中。以下我再重复一次, 然後做更多补充。如果您上侯捷网站去看,会更清楚些, 因为我以不同的颜色标示出错误的地方和修改的地方。 侯捷网站上的勘误内容 以下是我的新补充。 (1) 我写了一个实例如下。 / VC6 : cl -GX 1130.cpp / BCB4 : bcc32 1130.cpp / GNU C+ : g+ -o 1130.exe 1130.cpp #include #include #include #include using namespace std; /* generates : original elements sequence: 0 1 2 3 4 5 sequence after copy_backward(begin, end-3, end): 0 1 2 0 1 2 */ void main() int ia = 0, 1, 2, 3, 4, 5 ; vector vec(ia, ia+6); ostream_iterator ofile(cout, ); cout original elements sequence:nt; copy(vec.begin(), vec.end(), ofile); cout endl; copy_backward(vec.begin(), vec.end()-3, vec.end(); cout sequence after copy_backward(begin, end-3, end):nt; copy(vec.begin(), vec.end(), ofile); cout endl; (2) 书中对 copy_backward() 的规格说明如下: template BidirectionalIterator2 copy_backward( BidirectionalIterator1 first, BidirectionalIterator1 last1, BidirectionalIterator2 last2 ); 作者把叁数名称取为 last1 和 last2,不甚好,不能望文解义。 我发现 Generic Programming and the STL p.236 对於 此演算法的规格说明得比较好: template BidirectionalIterator2 copy_backward( BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 result ); Generic Programming and the STL p.236 并说,这个演算法 会执行以下 assignment 动作 : *(result-1) = *(last-1), *(result-2) = *(last-2), etc. 这段解释对我们了解 copy_backward() 的行为颇有帮助。 - the end C+ Primer 答客问 (9) 1999.10.19 Samn wrote (1999/10/18) : 侯捷老师 您好: 我是一位C+的入门学习者,见到 C+ Primer 3/e 中文版出来後 , 就花了约800多买了下来,(用折扣卡买的 所以比较便宜) 姑且不论价格与否. 内容是我比较在意的. 只是这本中文书的厚度实在是太厚,不方便带进带出 放在袋子中要放其他东西 就显得太重了许多 我又是一位习惯带着书跑的学生(应该算是),因为可以 一有时间就拿起来看, 可否建议您将其分割为三本书 让厚度约在2cm左右.方便携带. 不然的话把书拆了 有点可惜说. :P 敬祝万事如意. 侯捷回覆: C+ Primer 中文版确是满厚的(5.0 cm)。我尽许多努力要 将厚度降低,而就国内环境言,这可能是最大极限了。 以後的书籍,我会继续努力说服厂商用更好更薄的纸。不过 这非侯捷所能定夺。厂商告诉我,有的纸根本想买也买不到。 回到你的建议来。你说: 可否建议您将其分割为三本书 让厚度约在2cm左右. 方便携带. 曾经想过分割为两本。但是成本会增加不少,会反应到售价身上。 分割为两本後,单价并非原书价除以 2这样的简单算术。商务上 的许多细节,非置身其内的人是很难想像的。分割为两本,封面成本 要两倍,装订成本要两倍,印刷机上架成本要两倍(?),抄纸成本 可能也增加(?)。为了让上下册都完整,目录要两份,index 要两份, 导读要两份,前言要两份,於是纸张、排版、印刷成本又增加一些。 近年来我对印刷业务有一些了解,但不是完全清楚;上面说的可能 有些出入(包括术语和实际数字)。总之,成本增加不少,售价又得提高。 厚书确实很不好携带。 两难! * * * * * * * * * * 胖书排行 by the way,环顾书房,胖书有愈来愈多的趋势。目前我手上的排行榜 第一名是 Microsoft Press 出版的 Programming Windows 5/e,厚 7.1 cm。 第二名是 WROX 出版社的 Professional MFC with Visual C+ 6.0,厚 6.9 cm。 前天在书店看到另一本名书,Microsoft Press 出版的 Programming Windows with MFC 2/e,也非常厚,因为没买, 所以不知道确实厚度。 书到达这种厚度,除了给读者带来压力之外(阅读的压力以及 经济的压力 - 厚书售价不会太低),也给译者带来压力。 我猜想外文好书肥胖化,会导至其中译本更难推出。这终究 是一种损失,因为好的中译本可以节省我们非常多的阅读时间。 但是,作者可能不愿意在同一个主题上做分割,因为那对他的 写作带来困扰:既不完整且不方便。 两难! - the end C+ Primer 答客问 (10) 1999.10.29 Jimmy wrote (1999/10/25) : 侯先生您好: 我是上次询问 p1130 copy_backward() 的问题的人。抱歉又来打扰您。 这一次我的问题是 p1162 的 nth_element()。我把书上程式 按照您的网站上的说明加以修改,以 VC 6.0 编译,执行後的 结果却与书上不同。书上的结果是: original order of the vector: 29 23 20 22 17 15 26 51 19 12 35 40 sorting vector based on element 26 12 15 17 19 20 22 23 26 51 29 35 40 sorting vector in descending order based on element 23 40 35 29 51 26 23 22 20 19 17 15 12 我的结果却是: original order of the vector: 29 23 20 22 17 15 26 51 19 12 35 40 sorting vector based on element 26 12 15 17 19 20 22 23 26 29 35 40 51 sorting vector in descending order based on element 23 51 40 35 29 26 23 22 20 19 17 15 12 可否请您检验一下。 侯捷回覆: 喔,Jimmy,你一定是疏忽了 p.1163 的第二行: 重新安排後的第 n 个元素的左右两侧并不保证有任何特定次序 换句话说 nth_element() 这个泛型演算法只保证将小於 nth 元素的 所有元素都放在 nth 元素之前,将大於 nth 元素的所有元素都放在 nth 元素之後(当然,此後,原本的 nth 元素就不再是放在 nth 位置了)。 至於重新安排後的第 n 个元素的左右两侧,并不保证有任何特定次序。 我以 BCB4 和 GCC(egcs-2.91.57) 测试,结果正如书中所列。 - the end C+ Primer 答客问 (11) 1999.10.29 Michael wrote (1999/10/21) : 侯老师. 很冒昧写信打扰您.这是学生第一次写这样的信请教老师. 盼老师不介意学生的鲁莽. 学生为您近作 c+ primer 之读者.在学习上面有些疑惑与问题. 也希冀老师不吝解惑. 学生在所谓的电脑领域学习已有不少时日.由basic开始一路过来. 学习的东西不少.但不敢说非常精通.在最近拜读您的c+ primer之後. 却有着不知所措的感觉.其实学生经由自修方式和修课的机会. 将c+的语法做了大概的认识了解.不过.也由於是这样的方式. 使得学生在真正写出一个具oo观念的c+ 程式上.有着相当的差距. 回想过去的学习方式.学生对於书上所着之范例.并无上机实作. 而仅只限於纸上谈兵.把程式trace过一遍.再来.便是经由课堂上 老师的作业和练习.而达到学习的效果.但至上大学後.对课堂老师 的上课方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论