有问题就有答案
Q1:C++ 究竟难在哪里?
比较其他语言有什么困难?有人对c评价很高,除了性能优势,还有哪些优势?如何学好C?01 C的能力上限很高,可以说软件领域没有C做不好做不到的事情1
Q2:学习C++的最大难度是在哪里?
困难度之一 “C++ 是个难学易用的语言”,这句话相信很多人都心有戚戚2C++的学习难度,一在于语言本身太多的“幕”,另一个就在于 "paradigm shift" (思考模式的移转)3 传统语言如 C, Pascal, Basic, Fortran...,除了模样看起来稍有不同,基本上都是函式 call 来 call 去,大同小异,很容易掌握4你想做的动作,在 code 中都看得一清二楚5你所看不到的,也不过就是编译器为你的函式加上用以处理堆叠的一小段码(prologue 和 epilogue),这一小段码基本上做的是 housekeeping 工作,你没看到也没有关系,并不影响你对程式逻辑的思考6 C++ 不一样,C++ 有太多和程式逻辑息息相关的动作是编译器为我们加上去的7换句话说 C++ 编译器为我们“加码”8如果不识清这一节,学习C++ 有如雾里看花,雾非雾,花非花9 编译器为我们的 C++ 程式加了什么码呢?很多!物件诞生时 ctor 会被唤起,物件死亡时 dtor 会被唤起,这都是加码的结果10ctor 中设定vtpr 和 vtbl,这也是加码的结果11new 单一物件时会产生 memory block cookie,new 物件阵列时会产生一个内部结构记录着 object size 和 class ctor...,这也都是布幕后的工作12可以说,程式码中看不到而却必须完成的所有与程式逻辑有关的动作,统统都是 C++ 编译器加码后的结果13 当“继承”发生,整个情况变得稍微复杂起来14“多重继承”又更复杂一些,“虚拟继承”又再更复杂一些http://redoufu.com/。 这些布幕后的主题,统可归类为所谓的 C++ object model(物件模型)16如果不知道这些底层机制,你就只能够把 "make destructors virtual in base classes"或 "never treat arrays polymorphically"这类规则硬背下来,却不明白它的道理17用一样东西,却不明白它的道理,林语堂如是说:“不高明”18只知道 how,不知道 why19 困难度之二 C++ 的第二个学习难度在于 "paradigm shift"(思考模式的移转)20别说自己设计classes 了,光使用别人的classes,就都是一种思考模式和行为模式的移转21MFC(或 OWL 或 VCL)programmer 必然能够领略并体会其中的意思22 使用所谓的 application framework(一种大型的、凝聚性强的、有着物件导向公共基础建设的 class library),你的码和 framework 之间究竟是怎样的关系呢?framework 提供的一大堆可改写的虚拟函式的意义与价值究竟在哪里呢?为什么 framework 所设计的种种美好性质以及各式各样的演算法竟然可以施行于我们自己设计的 class types 身上呢?framework 被设计时,也并不知道我们的存在23这正是物件导向中的多型(polymorphism)的威力24 稍早所说的 C++ 物件模型,偏属程式设计的低层面;这里所说的思考模式移转,则是程式设计的高层面25能够把新思维模式的威力发挥得最淋漓尽致的,当推物件导向的 polymorphism(多型)和 generalization(泛型)26如果你没有使用这两项特性,等于入 C++ 宝山却空手而归27 反覆磨炼,循环震荡 想像 C++ 是一把用来解决程式问题的刀,要它坚轫,要它锋利,就必须经过多次的回火,在高热和骤冷之间——炼28 初学 C++ 语法(syntax)之后,你应该尽快尝试体验 polymorphism(大致而言也就是虚拟函式的运用)29等到对 OOP 的精神有了大局掌控的能力,但对 C++ 的许多小细节不甚清楚,就是回到C++ 物件模型 炼的时机30
Q3:c++到底复杂在什么地方
使用上的复杂度远超其它语言311)如果你不注重后期维护,那么你使用起来很简单,不过其他人看来就像是一个新人在学习一般,没有价值可言322)如果你单单使用单种特性,比如你使用了类,却不使用友元、模版等33那后期维护起来非常简单,但是缺乏泛用性343)如果对C++的所有特性用起来,你不单单要考虑后期的可维护性,还要考虑程序的复杂度35如果复杂度高,可能会造成后期维护越来越臃肿导致运行越来越慢,其次会造成程序的bug难道查阅4)社会和历史原因,各种各样的开发商都带各自的库,是否使用这样的一个库或者某个库需要慎重选择,一旦习惯一个库,编码的方式也有所影相,稍有不注意,会导致系列的bug365)可移植性,这是个好处,但也是个弊端,他不同java,他的库大部分需要经由系统发布者来封装,不同的封装方式也会影相编码的方式,导致小习惯造成大错误
Q4:c++相对于c来说难在哪?
c++只是C语言的演化,但是却加入面向对象的思想,其实主要也是思想,而所谓的静态多态性和动态多态性,及继承,封装等都是围绕着这个思想,语法不是很难,并且相对于C语言的输出更加简便,主要是理解面向对象的思想
Q5:都说c++难学,c++到底什么地方难学
初学者很难理解编程语言的语法规则37因为语法比较理性,有严格的使用标准,需要搭配逻辑判断38如果你是有一定编程基础的学习者,面向对象的思想很难理解39比如如何选择封装的强度、接口的程度、良好的类间关系、熟练使用多态等等40再加上软件开发模式、基本原理等等41面向对象的知识是对设计能力的考验42
Q6:听说编程c++比c难,难在哪个地方?
这个很好理解C++ 在 C 的基础上添加了类,模板等复杂的特性陷阱更多了,需要注意的地方更多了