Effective C++,rule 1,View C++ as a federation of languages

来源:互联网 发布:电熨斗推荐 知乎 编辑:程序博客网 时间:2024/06/05 00:07

前言

怀着敬畏、怀疑、求知的心态,重读Effective C++这本经典书籍,接下来会有一系列博客来记录重读经典过程中的笔记、体会,记录其中的验证求实过程。当然学习一门语言最重要的就是质疑,尤其是阅读经典书籍中,在自己的现在的知识体系的基础上,对书中任何有怀疑的地方都一定要动手验证,多想为什么。

正题

C++的四个子成分:1. C语言部分。    这个部分是说,C++是以C为基础,所有C的语法、编程规范,在C++中都是可以使用的。很多情况下,使用C++解决问题的方法其实就是C语言的高级解法。当然啦,C++>C,因为C与C++相比还是存在一定的局限性的。比如C语言里面没有面向对象、不能继承、不能多态。    不过,我想说的是,任何C++的高级特性其实都映射到C语言的某种实现方法上。面向对象与面向过程,只是解决问题的两种思维方法。C++多于C方面的特性,其实就是为了方便使用语言的人“偷懒”。比如,C++里面的继承,为什么要继承呢?就是为了子类能够inherit父类的已有的方法、变量,省去在子类重新coding这些东西的工作。但是,一种使用C语言做到”继承“的方法是可以把父类里面的东西copy下来到子类中。但是 这种是”伪继承“,因为直接拷贝代码这种方式,在父类需要进行更新时,那些复制到子类的代码都要跟着变。    然而···这是低级做法,我们可以仿照C++实现父子类时的方法:在子类中添加一个指向父类结构的指针。这样子,就可以使用C的结构体来模拟C++里面的面向对象的继承。多态、重载可以用函数指针的方式实现。而封装,这个我想更多的是C++编译器做的控制,因为类里面的public变量也好,private变量也好,反映到最后的汇编语言上是没有区别的,汇编语言中没有那个东西可以对应于这种访问控制,因此封装性肯定的由C++编译器完成的,具体来说应该是在符号表中添加了某些标识位。只不过,在C实现这些面向对象的工作会使工作量剧增,而C++正在是帮我们做了这个工作。2. 面向对象部分:这个C++的面向对象部分是肯定有的了,不用累述啦3. 模版编程部分:C++是支持泛型编程的,而泛型编程又是用代码简洁,提高代码的复用度。4. STL.     STL为C++提供了强大的后缘,提供许多高效,可以信手捏来的数据结构与算法。这是让C++程序高效的很重要的部分。Template和STL的基础是指针及函数指针的高级用法。当在使用不同部分时,为了让C++程度高效,我们需要根据所使用的不同部分来改变我们的策略。
0 0