Effective+C++的55则条款(1)视C++为一个语言联邦

条款一、视C++为一个语言联邦

打算直接将55个条款直接写一个总结的,想想还是分成各个模块吧,做一个系统的梳理,这本书当然是侯捷老师推荐的,因为最近在学习侯捷的C++面向对象高级开发,在导读的时候安利的,我问了我的同学还有同事,问他们看过这本书,有的人说看过,有的人说没有。果然,这算不算应验了:C++程序员分为两类,一类是看过Effective+C++,另一类是没有看过的。当然,这是个玩笑话。不过我最近因为刚入职嘛,也进了项目组,开始正式成为码农的一份子,确实有点感触,特别是看了这个视频还有这本书。这个视频最大的感触就是侯捷老师的一句话,确实,我也这么觉得,C++不再成为一门编程语言,而是成为了我们谋生的工具。所以,我们不再是为了学分,过了考试而学习C++,而是为了生活。
这本书的感触是,我们刚出校园,作为开发部的新人,我们做的模块,目前的水平,只是停留在实现他,而非开发,在设计的时候,我也没有做到设计占80%,写代码占20%,而是直接上手写代码,哪里缺东西,就添哪,哪里需要改,就改哪。曾经我觉得我从C学到C++,对面向对象也算了解,也曾学过23种设计模式,当初在学设计模式的时候,自我安慰,说以后进了项目组,应该就会注意这些,比如单例啊,观察者模式啊,适配器模式啦等等,然而现实中并不是,我为了实现项目就已经绞尽脑汁了,连效率有时候甚至都可以放弃,别谈设计模式,还有细节上的事情了。所以看了这本书,我才发现,确实我疏忽了很多细节上的东西,当然,我也不知道,大佬你们刚入职的时候,是不是也这样,哈哈哈。不过接下来,我会将每个条款都注意,尽量在项目中注意使用这些条款,哦,对,如果有人要看我前面说的视频的话,链接在这侯捷C++面向对象开发,大家看的时候,千千万别模仿,鬼知道我为什么会学会了战术喝水还有战术响指了。

不说了,该谈正事了,第一个条款,视C++为一个语言联邦
先问大家一个问题,当然也是经常被问的,C语言之父是谁啊,虽然我脑子里第一个想到的谭浩强,但是我说出来的应该还是丹尼斯·里奇,那C++之父呢,
本贾尼·斯特劳斯特卢普,我一般只记住丹尼斯,还有本贾尼,导致有时候会说丹尼斯本贾尼。大家都知道C++原本是C with class,从名字来看,c++在最开始可以称作C语言的增强版,但在后来,c++又引入了一些新的函数库和新的用法,如虚函数(virtual function)、操作符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常处理(exception)、RTTI(Runtime type information)、名字空间(namespace)逐渐纳入,逐步增强了c++的可用。进过改进,c++与C语言相比,效率不相上下,大概保持在±5%左右。可以说c++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言,而c只是面向过程的语言。
谈到面向对象,又不得不提面向对象的三大特性,即封装、继承、多态。
这里牵扯的内容就太多了,之前我们学C++的时候,我们老师第一个讲的是struct,然后将struct替换为class,再加上private等特征。接着第二课讲了C和C++的区别,从语法再到思想。

正如第一个条款所说,视C++为一个语言联邦,主要分为四大子语言
(1)C,C的许多语法,C++都有沿用,标准库也可以包含,一般在C++中包含库可以写为#include ,再比如C的区块,指针,数组,内置类型,预处理器等等C++都有沿用。当我们在C++中使用C的模块时,注意并没有C++的多态啊,重载啊等,这里可以拓展一下 extern "C"的用法,即为了能够正确实现C++代码调用其他C语言代码,加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名,在重载上可以很明显的看出,至于编译器对重载的做法,可能需要大家自己去查看一下。
(2)C++的特性,主要就是类,包括面向对象,封装,继承,多态(具体的在我其他博客有讲,当然,后面会具体讲C++的特性)
(3)template,模板,泛型编程,这是C++的泛型编程部分,由于templates威力强大,它们带来崭新的变成范型,也就是所谓的template meta-programmingTMP,模板元编程。
(4)STL标准库,容器算法迭代器以及函数对象(STL在我的笔记中有单独的模块,在有道笔记直接粘贴上来,代码示例不好切换,大家有想要我有道笔记的话,可以私我,后期我会渐渐上传到博客)。

综上:C++一共有四大子语言组成,想要真正理解C++,不得不深入挖掘这四大块,在四个模块中游刃有余的切换,这才能做到真正的高效编程。

你可能感兴趣的:(C++,c++,编程语言)