C语言和C++有什么区别?
36个回答
展开全部
一、主体不同
1、C语言:是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。
2、C++:是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计。
二、优势不同
1、C语言:能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
2、C++:不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
三、特点不同
1、C语言:提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
2、C++:在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C++通过建立用户定义类支持数据封装和数据隐藏。
参考资料来源:百度百科-c语言
参考资料来源:百度百科-C++
展开全部
C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
下面我们一步一步来分析C++与C的不同:
一、类,类对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。
二、引用,引用是C++中最好尽量不要用它,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。
三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。
四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,有时会产生使初学者莫名其妙的结果。
五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂。
六、继承,以及虚函数,看起来深奥,实用价值很低。还有些东东我就不发表评论了,如:new,delete操作符等
七、误区:以问答形式:
问:C++是面向对象化的而C是面向过程化的?
答:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐怕只有Java才算得上。
问:C++能实现C所不能的功能吗?
答:至少我还没有发现
问:学了C再学C++有障碍吗?比如程序设计思想
答:至少我还没有看见谁有此症状。
问:学了C再学C++又要重头开始吗?
答:不,C++下可以实现C语言的一切功能。
问:我学完了C一定还要学C++才能编程吗?
答:完全没必要。
问:C++比C好在哪里?
答:更加符合软件工程学
问:学完了C再学C++是不是很容易?
答:那要看你是不是真正的学完了C语言。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出, C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。 再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。
所以相对于C,C++包含了更丰富的“设计”的概念,但C是C++的一个自洽子集,也具有强大的功能,同样值得学习
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
下面我们一步一步来分析C++与C的不同:
一、类,类对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。
二、引用,引用是C++中最好尽量不要用它,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。
三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。
四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,有时会产生使初学者莫名其妙的结果。
五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂。
六、继承,以及虚函数,看起来深奥,实用价值很低。还有些东东我就不发表评论了,如:new,delete操作符等
七、误区:以问答形式:
问:C++是面向对象化的而C是面向过程化的?
答:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐怕只有Java才算得上。
问:C++能实现C所不能的功能吗?
答:至少我还没有发现
问:学了C再学C++有障碍吗?比如程序设计思想
答:至少我还没有看见谁有此症状。
问:学了C再学C++又要重头开始吗?
答:不,C++下可以实现C语言的一切功能。
问:我学完了C一定还要学C++才能编程吗?
答:完全没必要。
问:C++比C好在哪里?
答:更加符合软件工程学
问:学完了C再学C++是不是很容易?
答:那要看你是不是真正的学完了C语言。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出, C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。 再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。
所以相对于C,C++包含了更丰富的“设计”的概念,但C是C++的一个自洽子集,也具有强大的功能,同样值得学习
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一、最简单地可以这样理解:
C++是C的发展、延续和扩展。除工业特需外,单纯使用C进行实用编程的人已很少。
另外,C#是C++的仿照与扩展(但可能不能算是延继,底层实现完全不同)。
二、最通俗的理解:
1、为了降低编程难度,在C的基础上发展出了C++,C++的大部分语法与C相同,编程环境(编译器)完全不同,低层实现基本相同。
2、为了降低编程难度,在C++的基础上又发展出了C#,C#的大部分语法与C++相同,编程环境完全不同,低层实现的机理也根本不同。
3、在视窗操作系统中,编写实用程序,多数情况下用C++编程比用C编程工作量要减少十倍。
4、在网络应用,特别是三层架构的网站编写方面,多数情况下用C#编程比用C++编程工作量要减少十倍
5、减低了工作量的同时加强了稳定性(编写的代码越少,出错的机率自然越小),不可避免的减低了程序的运行效率(自动生成的代码中,很多是不必要的套路和不必要的调用)。
三、相关知识:
1、1972年美国贝尔实验室的 D.M.Ritchie 在B语言的基础上设计出了计算机C语言,1978年,C语言正式发布并制定语言标准。(够早了吧,比很多玩电脑的人的年龄都大),那时的计算机基本上只有专业的实验室里才能见到,普通人家是不可能有的。
2、1979 年,Bjarne Stroustrup 借鉴 Simula 中 "Class" 的概念,开始研究增强 C 语言,使其支持面向对象的特性,1983 年,这种语言被命名为 C++。此后,C与C++开始相对并行的发展。
3、相对于C语言来说,C++的很多的“高级”的写法和功能,是让编译器的“自动”去替代人工实现,这当然方便了程序编写人员,但是,正如很多自动化的东西一样,它自动生成的代码往往是“通用”的,套路化,在很多情况下,生成的代码的执行效率上会比人工编写的C语言低。这在计算机性能足够的情况下看不出问题,但在一些性能相对较低的运行环境中,就会有非常明显的差别,最典型的就是工业设计中的专用芯片的程序编写中(单片机控制)。
4、从语言的宏观上去看,C语言是面向过程,编程员要思考每一行代码对整个程序运行的影响,它最大的特点就是好的代码前后紧密联系,高速互动,最大的缺点就是出现故障时需要思考分析涉及的范围相对要广。
5、从语言的宏观上去看,C++在C语言的基础上引入了面向对象的概念,也就是说,它在编程思想上引入了一个一个功能模块单元的概念,用它进行程序编写,最重要的一点就是将整个程序的任务先分割成功能单元,单元之间传递必要的数据,每个单元之间相对独立。它最大的特点就是出现故障时,只需要对应功能单元及它的输入输出,这样排除故障就容易和快速得多,程序的运行也会可靠很多。
6、事实上,在当前,对于一般的win下的实用应用的开发,C语言基本上已经无能为力了。因为要在win下实现一个最基本的功能,用C去写,编程者要作的工作相对于用C++所做的工作,可能要多十倍以上。而且也没有足够的资料和可引用的代码(因为这样做的人少,所以,可供借用的也就少)。C++编程在win下已成主流之一。
7、随着计算机性能的发展,及网络技术的发展,C++也有它的后来者,那就是C#,对的,C++后面两个加号,C#的意思就是四个加号。从底层去看,类似于C++对比于C,C#也是方便了编程者但降低了程序的运行效率。
8、C#的运行机理是,基于.net动态库的调用及部分win API的间接调用,C++的运行及win API的调用及部分设备底层的IO调用。C++编译出来的可以是真正的机器二进制代码(也可以是调用C++运行库),而C#编译出来的只是一种中间码在运行中由.net环境进行边解释边运行,所以在计算机性能不足情况下,C#的程序运行速度要明显慢。
9、但也正如C与C++之间一样,C#与C++也在并行发展中,C#能完成的事,理论上C++也能完成,而且可能在效率上会更好。但是,在某些项目上,用C++开发的难度会是用C#开发难度的十倍以上,比如编写一个WEB网站。
C++是C的发展、延续和扩展。除工业特需外,单纯使用C进行实用编程的人已很少。
另外,C#是C++的仿照与扩展(但可能不能算是延继,底层实现完全不同)。
二、最通俗的理解:
1、为了降低编程难度,在C的基础上发展出了C++,C++的大部分语法与C相同,编程环境(编译器)完全不同,低层实现基本相同。
2、为了降低编程难度,在C++的基础上又发展出了C#,C#的大部分语法与C++相同,编程环境完全不同,低层实现的机理也根本不同。
3、在视窗操作系统中,编写实用程序,多数情况下用C++编程比用C编程工作量要减少十倍。
4、在网络应用,特别是三层架构的网站编写方面,多数情况下用C#编程比用C++编程工作量要减少十倍
5、减低了工作量的同时加强了稳定性(编写的代码越少,出错的机率自然越小),不可避免的减低了程序的运行效率(自动生成的代码中,很多是不必要的套路和不必要的调用)。
三、相关知识:
1、1972年美国贝尔实验室的 D.M.Ritchie 在B语言的基础上设计出了计算机C语言,1978年,C语言正式发布并制定语言标准。(够早了吧,比很多玩电脑的人的年龄都大),那时的计算机基本上只有专业的实验室里才能见到,普通人家是不可能有的。
2、1979 年,Bjarne Stroustrup 借鉴 Simula 中 "Class" 的概念,开始研究增强 C 语言,使其支持面向对象的特性,1983 年,这种语言被命名为 C++。此后,C与C++开始相对并行的发展。
3、相对于C语言来说,C++的很多的“高级”的写法和功能,是让编译器的“自动”去替代人工实现,这当然方便了程序编写人员,但是,正如很多自动化的东西一样,它自动生成的代码往往是“通用”的,套路化,在很多情况下,生成的代码的执行效率上会比人工编写的C语言低。这在计算机性能足够的情况下看不出问题,但在一些性能相对较低的运行环境中,就会有非常明显的差别,最典型的就是工业设计中的专用芯片的程序编写中(单片机控制)。
4、从语言的宏观上去看,C语言是面向过程,编程员要思考每一行代码对整个程序运行的影响,它最大的特点就是好的代码前后紧密联系,高速互动,最大的缺点就是出现故障时需要思考分析涉及的范围相对要广。
5、从语言的宏观上去看,C++在C语言的基础上引入了面向对象的概念,也就是说,它在编程思想上引入了一个一个功能模块单元的概念,用它进行程序编写,最重要的一点就是将整个程序的任务先分割成功能单元,单元之间传递必要的数据,每个单元之间相对独立。它最大的特点就是出现故障时,只需要对应功能单元及它的输入输出,这样排除故障就容易和快速得多,程序的运行也会可靠很多。
6、事实上,在当前,对于一般的win下的实用应用的开发,C语言基本上已经无能为力了。因为要在win下实现一个最基本的功能,用C去写,编程者要作的工作相对于用C++所做的工作,可能要多十倍以上。而且也没有足够的资料和可引用的代码(因为这样做的人少,所以,可供借用的也就少)。C++编程在win下已成主流之一。
7、随着计算机性能的发展,及网络技术的发展,C++也有它的后来者,那就是C#,对的,C++后面两个加号,C#的意思就是四个加号。从底层去看,类似于C++对比于C,C#也是方便了编程者但降低了程序的运行效率。
8、C#的运行机理是,基于.net动态库的调用及部分win API的间接调用,C++的运行及win API的调用及部分设备底层的IO调用。C++编译出来的可以是真正的机器二进制代码(也可以是调用C++运行库),而C#编译出来的只是一种中间码在运行中由.net环境进行边解释边运行,所以在计算机性能不足情况下,C#的程序运行速度要明显慢。
9、但也正如C与C++之间一样,C#与C++也在并行发展中,C#能完成的事,理论上C++也能完成,而且可能在效率上会更好。但是,在某些项目上,用C++开发的难度会是用C#开发难度的十倍以上,比如编写一个WEB网站。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
【C语言和C++的区别】如下:
1、全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。
2、C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。
3、特别是C++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中C++中的。C语言标准中不包括图形处理。
4、C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。
5、C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。
6、C语言对程序的文件的组织是松散的,几乎是全要程序处理;而C++对文件的组织是以工程,各文件分类明确。
想了解更多有关C语言的详情,推荐咨询达内教育。达内教育具有丰厚的师资力量,优秀的教学体系,教学质量突出,实战讲师,经验丰富,理论知识+学习思维+实战操作,打造完整学习闭环。达内教育独创TTS8.0教学系统,并设有企业双选会。达内的OMO教学模式,全新升级,线上线下交互学习,直播学,随时学,随时问,反复学,让学员学习更便捷。感兴趣的话点击此处,免费学习一下
1、全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。
2、C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。
3、特别是C++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中C++中的。C语言标准中不包括图形处理。
4、C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。
5、C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。
6、C语言对程序的文件的组织是松散的,几乎是全要程序处理;而C++对文件的组织是以工程,各文件分类明确。
想了解更多有关C语言的详情,推荐咨询达内教育。达内教育具有丰厚的师资力量,优秀的教学体系,教学质量突出,实战讲师,经验丰富,理论知识+学习思维+实战操作,打造完整学习闭环。达内教育独创TTS8.0教学系统,并设有企业双选会。达内的OMO教学模式,全新升级,线上线下交互学习,直播学,随时学,随时问,反复学,让学员学习更便捷。感兴趣的话点击此处,免费学习一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-08-29
展开全部
相同的地方:
1、语法类似:
由于Java可以算是从C++发展而来的,因此Java与C语言的语法比较类似
2、编程的熟练程度就是对语言程序库的掌握程度:
从某种程度上来说,编程语言都是由语法和相应的程序库所构成,Java有自身的类库,C语言则有标准库。所谓的编程,就是使用与语法来调用和组合程序库中的函数。
不同的地方:
1、内存管理
在Java中,基本不用考虑内存的问题,如果想用一个对象,new一个就可以,这个过程的背后则是JRE为对象分类的一定内存,当JRE发现你不再使用这个对象的时候,他就会自动回收内存,也就是说你只管借东西,不用管归还,因为与有人当你的跟班,在你不使用的时候就把东西归还了,不过这个过程还是有的,只不过是JRE作的而已。
但是C则不同,如果你想用,你可以用malloc之类的方法申请内存,当你使用完了,因为没有跟班的,你需要自己把这块内存归还回去,也就是调用free方法来完成这个任务。由于需要显式的归还内存,因此当一个函数需要将一块内存返回给调用者的时候,问题就比较复杂了,不如面向对象和具有内存回收功能的Java那么直观了。对于这个问题,在C语言中,有几种解决方案:
(1) 在调用者中先分配好内存,作为参数传入到被调用的函数中
(2) 在被调用的函数中分配,使用完后在调用者中释放
(3) 在被调用函数中使用static变量,可以将该变量返回
2、面向对象
Java的面向对象的特点很明显,而C则是一个地道的结构化语言。 Java中有一个字符串类String, 通过调用 String.length()就可以知道字符串的长度,但是在C语言中,则需要调用函数strlen(str)来得到字符串(字符数组)的长度。由于C不是面向对象的语言,也就没有this的概念,因此当使用一个与某个“东西”相关的函数时,就需要不厌其烦的将代表这个“东西”的变量作为参数传递进去。
3、名称空间
Java通过包(package)来实现名称空间,在C语言中,所有的函数都处于同一名称空间,也就是没有名称空间,因此就会很多程序提供的api接口函数都有一个前缀,例如MYSQL的mysql_init(), mysql_real_connect(), mysql_real_query()等函数名称前面的mysql_。
给你找的资料。
希望对你有所帮助。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询