学习C++编程语言的最大难度[VC/C++编程]
本文“学习C++编程语言的最大难度[VC/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"或 "never treat arrays polymorphically"这类法则硬背下来,却不懂得它的原理.用一样东西,却不懂得它的原理,林语堂如是说:“不高超”.只知道 how,不知道 why.
艰难度之二
C++ 的第二个学习难度在于 "paradigm shift"(考虑情势的移转).别说自己计划classes 了,光利用别人的classes,就都是一种考虑情势和行为情势的移转.MFC(或 OWL 或 VCL)programmer 必定可以懂得并领会此中的意思.
利用所谓的 application framework(一种大型的、凝集性强的、有着物件导向大众底子建立的 class library),你的码和 framework 之间毕竟是怎样的关系呢?framework 供应的一大堆可改写的虚拟函式的意义与代价毕竟在那边呢?为什么 framework 所计划的各种美好性质以及形形色色的演算法竟然可以施行于我们自己计划的 class types 身上呢?framework 被计划时,也并不知道我们的存在.这恰是物件导向中的多型(polymorphism)的威力.
稍早所说的 C++ 物件模子,偏属程式计划的低层面;这里所说的考虑情势移转,则是程式计划的高层面.可以把新思维情势的威力施展得最淋漓尽致的,当推物件导向的 polymorphism(多型)和 generalization(泛型).假如你没有利用这两项特点,等于入 C++ 宝山却空手而归.
反覆锤炼,循环震惊
想像 C++ 是一把用来办理程式问题的刀,要它坚轫,要它锋利,就必须经过多次的回火,在高热和骤冷之间——炼.
初学 C++ 语法(syntax)之后,你应当尽快尝试体验 polymorphism(大致而言也就是虚拟函式的应用).等到对 OOP 的精神有了大局掌控的本领,但对 C++ 的很多小细节不甚清楚,就是回到C++ 物件模子 炼的机会.
生长,是在高阶(polymorphism)和低阶(object model)之间反覆震惊,才可以震惊到更高的位阶,而不是平平淡庸于中阶(C++ syntax)的一滩死水.
以上是“学习C++编程语言的最大难度[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |