网站大量收购闲置独家精品文档,联系QQ:2885784924

c++的沉迷于爱恋(转贴).doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c的沉迷于爱恋(转贴)

c++的沉迷于爱恋(转贴) 发信人: hucong (糊聪), 信区: Program 标 题: c++的沉迷于爱恋(转贴) 发信站: 栋力无限 (Sun Apr 15 17:52:14 2001), 转信 作者:侯捷 1998.09.28 发表 每年的 09/28 於我都是一个特殊的日子 -- 不只是因为教师节。今年很特殊地没有普天 同庆,那麽我就写篇文章自己庆祝一下好了。 我於今年七月发表了一本着作 多型与虚拟 和一本译作 深度探索 C++ 物件模型 , 获得很大的回响。这些作品都不是针对 C++ 的完全初学者所写,但从初阶到高阶为数众 多的 C++ guy,热情地表达了他们对这些主题的喜悦。 在许多来信中,我看到一些有趣的现象,也感受到一些值得整理下来的想法。所以,根 据我个人的学习过往、我的教学经验、以及周遭朋友的心得交流,写下这篇文章,或可 为後学者戒。 ●多型与虚拟 序言节录 首先让我节录 多型与虚拟 一书序言: 多型与虚拟 序 节录(侯俊杰/松岗/1998/07) 一般而言,C++ 是一个难学易用的语言。 C++ 的难学,初始在於其重重的布幕,布幕之中编译器对我们的程式码做了太多的手脚 ,使我们惯於循序思考的工程脑袋一无所措。及长,又面临新的思维模式,使我们必须 扭转惯常的思考习惯。 C++ 的易用则在於其巨大的弹性,能够以多型(polymorphism)、虚拟(virtual)、模 板(template)、泛型(generalization)等种种型式,让既有的码去处理未知的、未 来的资料型态。 当然,易用必须先能用。用不好或不能用的话,「写 C++ 程式」最後就成了只是「使用 C++ 编译器」,这是大家常拿来彼此调侃的笑话。 在「难学」的背景下,「易用」是使我们依然前仆後继的动力。愈来愈多的大学资讯科 系把 C++ 开在大一课程,这虽然说明 C++ 是多麽地重要,可也苦了资讯新兵们。 其实「难学」的最大症结在於,很难得有一本书,能够一针见血地指出多型与虚拟的重 要性;在我们粗具语法基础之後,直接把我们导引到最核心最重要的思想,并且在建立 这个思想的过程中,提供足够的必要基础。 ●困难度之一 「C++ 是个难学易用的语言」,这句话相信很多人心有戚戚。C++ 的学习难度,一在於 语言本身太多的「幕」,一在於 paradigm shift (思考模式的移转)。 传统循序语言如 C, Pascal, Basic, Fortran...,除了模样看起来稍有不同,基本上都 是函式 call 来 call 去,大同小异,很容易掌握。你想做的动作,在 code 中都看得 一清二楚。你所看不到的,荦荦大者也不过就是编译器为你的函式加上用以处理堆叠的 一小段码(prologue 和 epilogue),这一小段码基本上做的是 housekeeping 工作, 你没看到也没有关系(更好),并不影响你对程式逻辑的思考。 C++ 不一样,C++ 有太多和程式逻辑息息相关的动作是编译器为我们加上去的。换句话 说 C++ 编译器为我们「加码」。如果不识清这一节,学习C++ 有如雾里看花,雾非雾, 花非花。 编译器为我们的 C++ 程式加了什麽码呢?很多!物件诞生时 ctor 会被唤起,物件死亡 时 dtor 会被唤起,这都是加码的结果。ctor 中设定vtpr 和 vtbl,这也是加码的结果 。new 单一物件时会产生 memory block cookie,new 物件阵列时会产生一个内部结构 记录着 object size 和 class ctor...,这也都是布幕後的工作。可以说,程式码中看 不到而却必须完成的所有与程式逻辑有关的动作,统统都是 C++ 编译器加码後的结果。 当「继承」发生,整个情况变得稍微复杂起来。「多重继承」又更复杂一些,「虚拟继 承」再更复杂一些。 这些布幕後的主题,统可归类为所谓的 C++ object model(物件模型)。如果不知道这 些底层机制,你就只能够把 make destructors virtual in base classes(Effect ive C++, item14)或 never treat arrays polymorphically (More Effective C++, item 3)这类规则硬背下来,却不明白它的道理。 用一样东西,却不明白它的道理,林语堂如是说:『不高明』。只知道 how,不知道 w hy,侯捷如是说:『不高明』。 ●困难度之二 C++ 的第二个学习难度在於 paradigm shift(思考模式的移转)。别说自己设计 cl

文档评论(0)

me54545 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档