为什么要学习C+,学习C+有什么好处

对于为什么要学习C++语言,这一点,想必很多人都官方的或者不官方的说过很多。当然,我结合我从事C++编程的经验来讲。

对于我本人来讲,我很喜欢C++语言。喜欢总是有原因的。如果你喜欢一个语言,但是不知道喜欢它什么,那么这样是有点假的。你喜不喜欢没有人去纠结这点。

我也不教科书式的介绍C++有什么优点之类的。我坐在电脑前,不翻阅其他资料,仅凭自己的现在的所思所想来将最贴近我们的一些说出来。将那些高大上的名词堆砌出来,没什么意思,对于真实的学习指导意义不大,反而感觉枯燥无味。似乎还想去记忆C++的好处,然后跟别人说的时候感觉自己是知道的。而我们的课程,并不需要你去记这些东西,也不需要应付考试,全凭自己内心深处的感觉,就学习了。所以,心中最疑惑的地方,也就是我们需要讲的地方。

由于篇幅有限,今天分享之前先说下这个,,如果大家喜欢的话我会再更新,专注学习C/C++技术的小伙伴可以进群(六二七零一二四六四)一起交流学习,群里还有大量学习资料可供大家自行下载参看,欢迎大家一起来交流讨论

以前我也试着记忆C++的几大特性,然而经常教条式的记忆,也就忘记了。这种东西,不是为了考试,一点记忆的价值都没有。如果说我现在需要知道,说要跟你讲,我百度一下就出来了。输入“C++特性”,保证可以搜到一大堆。然而不是说,不记忆等于不学习它。我们课程后面会介绍C++语言的这些特性的。我们只需要将这些概念理解了,就可以了。然而理解了并不意味就是结束,而实际真正有意义的是融会贯通,将这些思想用在实际的开发中。这才是真正的目的,学这些思想,就是为了运用,甚至产生新的思想,这就是站在巨人肩膀上创新。

那么我就来说说为什么要学习C++语言。你不必去记忆我说的这些东西,你在你的心里,如果得到认可,就打个印象分,找到C++的好处,可以作为选择C++的理由,这些也是你喜欢C++的理由。

纵观各种编程语言,C语言、C++语言、Java、C#。。。,要说一个技术思想覆盖最广的,只有C++语言了。这是我一直很喜欢C++的原因之一。C++是技术思想的集大成者,C++现在说是C的超集,是远远不够的。超集也就是说,C++涵盖了C的所有技术点,同时还有很多技术点。Java、C#都是技术思想偏窄的语言,适用于特定领域。Java适用跨平台的,C#是最适合.Net框架的语言等等,C语言适合底层的开发。

从C++的发展趋势来看,C++一直保持活力,不断扩展更新,不断地完善自己融入新的思想。C++也发展了很多版本,我们一般人学习的,都是C++98版,默认都是这个版本。新的有C++11版,C++14版,C++17版正在商讨中。版本号是按照年份来的,C++98就是1998年定制的标准。不同的版本也就是支持的特性不一样,版本越新,支持的特性思想也就越多。

而这些版本,以C++98来讲,都具备很强大的覆盖面。C++支持的基本思想有面向过程、面向对象、泛型思想、模板元等等。至于更新的,就没有研究太多。

面向过程就是C语言支持的思想,是最基本的。面向过程的核心是模块化编程,以函数为单位进行组织,从而提高开发效率。C语言没有面向对象,也就显得轻便简单,所以运行效率很高,适合开发硬件底层方面,因为语言本身也不复杂,相对于C++而言的,所以很轻巧。因为C/C++支持指针的直接操作,所以可以直接操作硬件,所以更适合底层。这是他们的最大的优势。而其他语言,操作是可以,不过是间接的,语言内部做了各种检测和处理,为了安全起见,防止指针错误。

而C++从C语言发展过来,借鉴了C语言的所有特点,并兼容C语言所有特性语法。所以C++语言同样具备C语言的各种特性。如果你不用C++的其他特性,就可以用做C语言一样了。这样,基本没什么区别。但是如果这样的话,那用C++还有什么意思呢?

而Java和C#语言是纯面向对象的语言,即使是一个控制台程序,都封装成一个类的模式,将main函数作为类的静态函数,就变成了全局的函数,也就可以模拟成C一样的main了。

C++语言因为兼具面向过程和面向对象的思想,因此,在C++中可以和C语言一样的使用main函数,而其他地方可以和java、C#一样使用类。非常的灵活,而且不必将main扭曲包装到一个类中,看起来都很累。

从上面你可以看到,C++语言上得了厅堂下得了厨房。面向对象的思想给快速开发提供了很大的支持,使用封装的类,可以不用重复写相同的代码。其他的地方,只要用你这个类就行。因为是封装到了一个类,各种相关函数都放在一起,所以,使用上也就方便多了,而不像C语言的各种库函数非常的零散,经常找不到有那些相关的函数。这里体现的就是面向对象的两个优点,就是代码复用和代码封装。后面课程会详细分析,这里就不多解释了。

对于面向过程、面向对象的了解,可以阅读《面向对象,你真理解了吗(1)-认识的几重境界》、《面向对象,你真理解了吗(2)-面向对象发展的前奏》和《面向对象,你真理解了吗(3)- 面向对象思想的理解》。

在开发中,我们还会经常遇到这样的情况,比如说,我们写一个类,专门处理猫这个动物的信息,但是我们发现,我们还要处理狗这个动物的信息,而这些信息结构都是一样的,但是处理的对象类型不一样,不能将猫狗混为一谈。而你可能就要写两种类,写两份类似的代码。虽然你可能会写一个通用的动物类,但是有时候效果不太好,技术上实现也比较麻烦,甚至无法实现。因此,C++发展了模板技术。这个就是基于泛型编程的思想。这个技术的好处就在于,一个模板适用于一类东西,而不是一种东西。比如,模板可以使用所有的爬行动物,而不是狗猫这些动物。对于模板,你只要给它一个类型,就可以了。适用的这一类东西,都可以处理的很好。而你要写的就是一个模板类,然后使用时给它传给类型,就可以了。不过这个对于普通的程序,一般也不会用,毕竟这是比较高级的技术了。

模板技术是泛型思想的一个部分,还有一个就是算法和容器。这里就是STL技术了。STL是基于C++模板技术发展的一套技术,主要是算法和容器。STL以效率作为第一准则,实现了各种算法,不过提供我们使用的就是容器和算法函数了,使用起来其实很简单。算法是一套,容器又是一套,为了适应不同的要求,需要将算法和容器拼接起来,也就是说算法和容器交叉使用,而不是固定映射关系,也就是说,这里的算法可以用在大部分甚至所有的容器上,为了将两者联系起来,就需要一个桥梁。算法操作桥梁,桥梁去操作容器,不同的桥梁向算法提供统一的接口,而不同的桥梁又和不同的容器匹配,比如USB数据线,对于电脑端的都是标准的接口,但是另一头就是各种各样的,比如手机的、平板的等等。

泛型思想就在模板技术的基础上开花了,实现了更强大的算法和容器操作。而算法和容器,在其他语言里,比如java和c#都有实现,不过就不明朗了。java和c#里封装成容器类,使用也挺方便,不过,你却很难对其内部实现做深入了解。但是STL不一样,它提供的容器简单易用,使用时使用不同的容器类,而不是混着用。不要觉得只有java这类语言好厉害一样,只是你还不知道C++一直都可以这样玩,而且比Java他们玩的更好。这一点也是我喜欢的。

还有一个很超前的技术思想,就是对编程的代码进行编程,这个就是模板元编程。也就是说,我们可以对现有的代码进行编程,而我们写的代码是给预编译器来编译的,编译完后就生成了我们现在写的代码。模板元编程将我们的函数,数据类型等都作为参数,来编程,输出代码。这个就是很多的开源库使用的。很多开源库要支持跨平台,实际上,它要编译成具体的平台才能使用,而不是使用虚拟机机制。比如OpenCV库。你可能看过hpp为后缀名的文件名,这个就是模板元的源文件。执行它之后,就可以输出我们要的各种源代码,比如cpp代码,或者c代码等。这种就实现跨平台。不然你以为这些库是如何跨平台的呢。而跨平台的实现,则是根据程序检测到的平台类型,然后生成不同平台匹配的源代码。这个技术思想就是对编程的编程。我们还在写源代码,高手们已经开始写生成我们的源代码的代码,何等之高。我们的技术发展,落后的不是一点两点,这也是我们网站急切要推出零基础入门直接奔向高手的系列课程的一个原因,我们技术太落后了。我们停留在使用开源库,而他们在开发开源库。这个,C++语言可以做到,其他语言几乎很难做到,也不会去做。

另外一点,不管是Windows系统还是linux,都是采用的标准C的API输出。也就是说,C/C++的面向过程特性,可以最适配API函数的使用,也可以直接使用,而无需使用函数库类库来提供调用支持,而纯面向对象的语言,则不能直接调用API函数。那么通过函数库调用,效率就很低了。实际上直接使用API调用,处理非常灵活。这是C/C++的好处之一。

最后还要说的一点,对于我们程序员自身的发展来说,自己技术功底越深厚,发展自然就更好些。程序员靠技术说话,技术不够,语气不足,脚跟不稳。而学习C++可以将各种技术掌握,而且不需要转换语言,都在同样的环境下掌握。C++实现的很多技术,比如COM组件技术,为Web和其他的开发提供了极大的支持,而其他语言主要是使用,C++不仅可以原生使用这些技术,而且这些技术都是使用C++开发的。对于C++来使用这些技术,非常的自然,就和直接调用API一样,无非就是要多了解一点背景知识罢了。

为什么要学习C++,就我们发展来讲,很多时候,我们可能会想到转行或者转方向,C++学习,只要你循序渐进,前期可能是难,不过学到后面,你会越来越轻松。而前期的困难,则是让很多人止步的原因。不过,不就是多花点时间而已,其实一步一个脚印,也不是很难的事情,关键在于你有没有心去学好。不过为了极大降低C++入门的难度,C++技术网推出这么一个课程,就是帮助大家更容易入门C++,并且对C++产生兴趣。我们希望在这些基础课程完结之后,提高了整体的水平,我们就都可以进攻更高级的技术了哦,而不是一直在这里徘徊不前。如果你熟悉了C++或者精通了C++,要转向其他语言,其实一个星期足够了,甚至不需要花什么时间学其他语言,只需要看点资料,了解这个语言的结构和特性思想,然后就可以入手开发了。而对于具体的语法,百度一下就清晰了。而在其他语言中,想转到C++学习,几乎不可行,因为很多技术听都没听说过,更别说一下子就转过来了。转到C++就要从头学。

为什么学习C++,在前面的各种描述中,不说自明了,而学习的好处,是其他语言不具备的。为了自身的长期发展,C++是一个很好的选择,不是在于语言的选择,而是在于自身的技术水平的提升。在开发过程中,语言的差异不是很重要了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171231A00UUH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券