第1个回答 2012-07-26
严格的说完全是不同的语言,C和C++追求的目标完全不同。
一开始C++试图完全兼容C语言,并引入面向对象的概念。
但是随着时间的推移,人们发现面向对象和C语言本身就存在着不相容的问题。因此C++语言变得异常复杂,试图解决这方面的问题,到了后来只好放弃了,发展成了一种独具特色的语言。在图形界面,事件响应方面比C语言有很多改进。
C#其实是很好的语言(虽然本人很少使用C#),C#吸收了Java的面向对象,C#试图提升程序的工作效率向C语言看齐。C#放弃了和C语言的兼容性,从而使得它能够真正意义上面向对象,有严格的类型系统。
C++语言从发展过程中来看,能够兼容C使它快速发展,但是C语言是弱类型语言,void满天飞(windows下叫做HANDLE),是C语言的严重缺陷。可是void满天飞能提高效率,是操作系统所需要的。但是void怎么能是类型,是什么对象?这也导致一开始C++语言对于类型的理解出现分歧。现在基本上已经明确了,C语言中不合理的部分不再继承。这样C++就和C语言越走越远了。
个人觉得,写应用程序首推C#、Java,专业(操作系统、编译器)首推C,图形界面库复杂图形界面C++。
说说专业的感受,我现在使用的是C语言,但是考虑的是汇编。C语言编译器一般情况下可以很好的将代码转化为汇编。如果把语言比做汽车,C语言就是那种手动挡的汽车,C++就是自动挡的汽车。C++复杂,可靠性略差,C语言简单、易操作。但是对于专业用户来说,开手动挡的汽车往往能够略微在速度上超过自动挡(不考虑无级变速)的。其实高级语言最终也应该是无级变速的那种,完全不需要程序员去考虑CPU、缓存、内存、寄存器。但是目前来看,如果你用C++写一个程序,我一般情况下可以使用C语言写一个一样的程序,但是在指定的环境中比你的效率更高。但是可能也仅仅快了2-50%,相比之下,一个好的算法可能快数千倍甚至更多。而C语言还不如汇编快,能够手写汇编超过现代C编译器的人非常少。就好像如果你不是专业驾驶员,你开手动挡,可能比自动挡还慢。那还不如开自动挡省事。
手动挡是人工调节省油、速度、发动机磨损相关参数,自动挡就不用你考虑了,一个有经验驾驶员能够在需要的方面超过自动挡。但是一个没有经验的驾驶员,可能使用手动挡在各个方面都比自动挡差,甚至经常熄火。
F1方程式现在一般就是"半自动手动挡“(无级变速算作弊),实际上就是手动挡一种。因为它基本上都是针对专业用户的。可是地面上这么多汽车,手动挡的可就没有那么多了。
第2个回答 2023-04-01
当我看到类似C++要从C过度的回答的时候,心情很郁闷。C++可以说跟C可以完全脱离关系。在20年前,你可以说C++是C的扩展。但是在今天,国际标准早就把两者分开,无非C语言可以在VC环境编译,C++某些函数以前被C使用,但是现在它已经是独立的封装体。(这跟台湾是不是中国的不是一会事,免得好事者来说我有台独思想)编程语言是各自独立的,只是他们的大多数原理相同,而C++偏偏是通过C发展而来,语法非常相似,所以很多人就把C认为是学习C的基础,其实没C基础学C++反而更好,不会有那些思维模式。先入为主会影响我们后面的学习。C是面向过程的语言,强调解决一个最迫切的问题,它只考虑目前要完成什么。C++主要(注意,是主要,不是完全,它也可以面向过程)面向对象,考虑的是走哪种路径去实现任务,其抽象性更高。举例来讲:C是完成走路,它想方设法走到终点为止,不考虑路径,考虑的是每一步怎么走,思考模式不固定。C++考虑的是走什么路,然后再去考虑各条路要用什么步子(每种步伐负责走完一段路),各个步子应该怎么实现,其思考模式是从大到小。所以从来没什么:欲学C++,必先学C。的说法。更实际的说,完全掌握一门语言的精髓,你就等于掌握了与之类似的语言的精髓,说白了:精通一样,明白全部
第3个回答 2012-07-26
语法上区别不大,编程思想上区别天壤之别.
你也可以硬生生的用C++按照C的风范去写程序,只是看着别扭而已.
同样,也可以用C封装一些结构体,按照C++面向对象的思想去编程,相对于C++写要麻烦许多.
第4个回答 2012-07-26
楼上的确很详细,C++是由C发展而来的面向对象的语言。如果你要学,可以直接学C++