欢迎来到天天文库
浏览记录
ID:34522348
大小:137.46 KB
页数:4页
时间:2019-03-07
《c++的沉迷与爱恋》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++的沉迷与爱恋Page1of4C++C++的C++的的的沉沉沉沉迷迷迷迷与与与与爱爱爱爱恋恋恋恋 每年的09/28对於我都是一个特殊的日子--不只是因为教师节。今年很特殊地没有普天同庆,那麽我就写篇文章自己庆祝一下好了。 我於今年七月发表了一本着作<多型与虚拟>和一本译作<深度探索C++物件模型>,获得很大的回响。这些作品都不是针对C++的完全初学者所写,但从初阶到高阶为数众多的C++guy,热情地表达了他们对这些主题的喜悦。 在许多来信中,我看到一些有趣的现象,也感受到一些值得整理下来的想法。所以,根据我个人的学习过往、我的教学经验、以及周遭朋友的心
2、得交流,写下这篇文章,或可为後学者戒。●<多型与虚拟>序言节录首先让我节录<多型与虚拟>一书序言:<多型与虚拟>序节录(侯俊杰/松岗/1998/07)一般而言,C++是一个难学易用的语言。C++的难学,初始在於其重重的布幕,布幕之中编译器对我们的程式码做了太多的手脚,使我们惯於循序思考的工程脑袋一无所措。及长,又面临新的思维模式,使我们必须扭转惯常的思考习惯。C++的易用则在於其巨大的弹性,能够以多型(polymorphism)、虚拟(virtual)、模板(template)、泛型(generalization)等种种型式,让既有的码去处理未知的、未来的资料型态。当
3、然,易用必须先能用。用不好或不能用的话,「写C++程式」最後就成了只是「使用C++编译器」,这是大家常拿来彼此调侃的笑话。在「难学」的背景下,「易用」是使我们依然前仆後继的动力。愈来愈多的大学资讯科系把C++开在大一课程,这虽然说明C++是多麽地重要,可也苦了资讯新兵们。其实「难学」的最大症结在於,很难得有一本书,能够一针见血地指出多型与虚拟的重要性;在我们粗具语法基础之後,直接把我们导引到最核心最重要的思想,并且在建立这个思想的过程中,提供足够的必要基础。●困难度之一「C++是个难学易用的语言」,这句话相信很多人心有戚戚。C++的学习难度,一在於语言本身太多的「幕」
4、,一在於"paradigmshift"(思考模式的移转)。传统循序语言如C,Pascal,Basic,Fortran...,除了模样看起来稍有不同,基本上都是函式call来call去,大同小异,很容易掌握。你想做的动作,在code中都看得一清二楚。你所看不到的,荦荦大者也不过就是编译器为你的函式加上用以处理堆叠的一小段码(prologue和epilogue),这一小段码基本上做的是housekeeping工作,你没看到也没有关系(更好),并不影响你对程式逻辑的思考。C++不一样,C++有太多和程式逻辑息息相关的动作是编译器为我们加上去的。换句话说C++编译器为我们「加
5、码」。如果不识清这一节,学习C++有如雾里看花,雾非雾,花非花。编译器为我们的C++程式加了什麽码呢?很多!物件诞生时ctor会被唤起,物件死亡时dtor会被唤起,这都是加码的结果。ctor中设定vtpr和vtbl,这也是加码的结果。new单一物件时会产生memoryblockcookie,new物件阵列时会产生一个内部结构记录着objectsize和classctor...,这也都是布幕後的工作。可以说,程式码中看不到而却必须完成的所有与程式逻辑有关的动作,统统都是C++编译器加码後的结果。当「继承」发生,整个情况变得稍微复杂起来。「多重继承」又更复杂一些,「虚拟继
6、承」再更复杂一些。mk:@MSITStore:E:pediy汇编教学Windows汇编数据结构与算法综合资料库.CH...2008-8-23C++的沉迷与爱恋Page2of4这些布幕後的主题,统可归类为所谓的C++objectmodel(物件模型)。如果不知道这些底层机制,你就只能够把"makedestructorsvirtualinbaseclasses"(,item14)或"nevertreatarrayspolymorphically"(,item3)这类规则硬背下来,却不明白它的道理。用一
7、样东西,却不明白它的道理,林语堂如是说:『不高明』。只知道how,不知道why,侯捷如是说:『不高明』。●困难度之二C++的第二个学习难度在於"paradigmshift"(思考模式的移转)。别说自己设计classes了,光使用别人的classes,就都是一种思考模式和行为模式的移转。MFC(或OWL或VCL)programmer必然甚能够领略并体会我的意思。使用所谓的applicationframework(一种大型的、凝聚性强的、有着物件导向公共基础建设的classlibrary),你的码和framework之间究竟是怎样的关系呢?framewo
此文档下载收益归作者所有