初学者编程入门:学习C++的难度

初学者编程入门:学习C++的难度,第1张

初学者编程入门:学习C++的难度,第2张

困难之一是

" C++是一种难学而易用的语言."相信很多人都有同样的感受。学习C++的难点一是语言本身的“屏幕”太多,二是“范式转换”(思维方式的转变)。

传统语言,如C、Pascal、Basic、Fortran...,几乎一模一样,也很容易掌握,只是在外观上看起来略有不同。你想做的动作在代码中可以看得很清楚。你看不到的是,编译器给你的函数增加了一小段代码(prologue和epilogue)来处理堆栈。这一小段代码基本上是做家务的。没看到也没关系,不影响你对程序逻辑的思考。

C++不一样。C++有Otawa程序逻辑,紧密相关的动作是编译器给我们添加的。换句话说,C++编译器为我们“添加了代码”。如果不清楚这一节,学习C++就像雾里看花,雾不是雾,花不是花。

编译器给我们的C++程序添加了什么代码?很多!物体出生时会激起ctor,物体死亡时会激起dtor,这是超重的结果。Vtpr和vtbl设置在ctor,也是超重的结果。当创建单个对象时,将生成一个内存块cookie,当创建一个新对象数组时,将创建一个内部结构来记录对象大小和类指导符...,都是幕后黑手。可以说,所有代码中看不到但必须完成的与程序逻辑相关的动作,都是C++编译器加码的结果。

当“继承”发生时,整个情况就变得稍微复杂了。“多重传承”更复杂,“虚拟传承”更复杂。

这些幕后的主题可以归为所谓的C++对象模型。如果你不知道这些底层机制,你就只能死记硬背“让毁灭者在基类中虚化”或者“永远不要多态地对待数组”之类的规则,而不明白它们的道理。利用某样东西,却不明白它的道理。林语堂说“不聪明”。只知道怎么做,不知道为什么。

难度2

C++的第二个学习难点在于“范式转换”(思维方式的转移)。不要自己设计类。只是用别人的课,是一种思维模式和行为模式的转移。MFC(或OWL或VCL)程序员必须能够欣赏和理解其中的含义。

使用所谓的应用程序框架(一个大型的、内聚的类库,带有面向对象的公共基础设施),你的代码和框架是什么关系?框架提供的大量可重写虚函数的意义和价值是什么?为什么框架设计的各种好看的属性和算法,都可以应用到我们自己的类类型上?框架设计的时候,它不知道我们的存在。这就是面向对象中多态性的力量。

前面提到的C++对象模型属于编程的低级;这里说的思维模式转移是编程的高级。发挥新的思维模式的力量的最好方法是推面向对象的多态(polymorphism)和泛化(generics)。如果不使用这两个特性,就像进了C++宝山but 空又回到了家。

反复回火,循环振荡

想象C++是一把用来解决程序问题的刀。如果是坚固锋利的,必须经过多次回火,在高热和骤冷之间回火。

学完C++语法后,要尽快尝试体验多态(粗略的说就是虚函数的使用)。当你有能力掌控OOP精神的大局,却不了解C++的很多小细节的时候,就该回到C++对象模型提炼了。

成长是高阶(多态)和低阶(对象模型)之间的反复振荡,使其振荡到更高的层次,而不是一潭死水平庸于中阶(C++语法)。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 初学者编程入门:学习C++的难度

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情