C和C++有什么不同?

我是一名菜鸟。我总觉得C的语法和C++的语法没什么区别,把C的代码直接贴到C++里编译也能运作。
也许它们的区别不在语法方面吧?如果回答是「前者面向过程后者面向对象」这种通用常见的答案,我希望能科普给我这种小白一下下——什么是「面向对象」呢?能有一个小白也能理解的答复就好了。

或者换个问法,需要瞭解什么东西,才能感受到它们的不同呢?

推荐  (0) | 6人关注关注
5个答案
4 0

架構夢想程序猿 代码格式化洁癖 理想主义洁癖 等

2014-01-04 10:19

就算c语言是面向过程的,也不代表c写不出面向对象的程序。毕竟这些语言都是图灵等价的。

首先,c++ 比 c 多出来 class interface abstract super 等等关键字

c++ 在设计之初 就是为了弥补 c 语言里面的一些不方便的特性。所以大多数的c代码可以直接在c++编译器中运行。



其实不同语言的区别,除了语法上的各种糖不一样。其实都差不多的。毕竟目前大多数都是结构化的编程语言。


稍微宏观一些看
面向过程关注的是 程序执行过程某一时刻的 算法与此时此刻的结构
面向对象关注的是 程序执行过程某一时刻的 对象们的状态与对象们之间传递的消息
虽然在微观上看,都是顺序执行一行行的代码。但是代码组织的思路不是太一样。
而且并没有特别明确的区分。对象内的方法其实是过程化的。而组织数个算法与结构时也是对象化的思路。

一定有区别的话。可能c语言关注层面比c++窄。

上面只是我个人理解。不一定完全正确。仅供参考交流........

2 0
支持者: 精英王子 方程

按C++之父的说法,他借鉴了SmallTalk的OO(Object Oriented)特性,在C的基础上发明了C++(理论上,C++是C的超集)。在七十年代C已经是一门流行的语言,有庞大的代码基(比如用来写UNIX系统)。软件工程规模扩大到一定程度之后,代码维护就越来越成问题。于是有人开始借鉴建筑学领域的概念,引入了面向对象编程范式。

神马叫面向对象编程?首先你要有个对象,然后让他/她坐你对面你再编程。

其实C++中的“面向对象”可以分成两个层次,首先是对象化,其次是运行时多态。

对象化就是把数据抽象成“对象”来描述,“对象”把一种数据类型及其相关的操作封装起来,隐藏细节。这样就便于从不同的粒度上描述问题。用建筑来打比方,把组合在一起的建筑材料作为一个整体来考虑,而不用去关注内部细节。

多态在编程中指的是同一种接口,不同的行为。不同的语言有不同的实现多态的方案(SmallTalk, java, Objective C都不一样)。落实在C++中,就是虚函数。大致说来,对于已经了解了C的C++初学者来说,掌握了虚函数的用法就掌握了C++面向对象技术的核心。(相对于“正统”的面向对象语言来说,虚函数是一种为了提高效率的妥协方案,本质上是在模块之间定义二进制协议。)

不过学习C++如果只知道面向对象,那你已经out了,理论上C++支持四种编程范式:面向过程(PO)、基于对象(OB)、面向对象(OO)、泛型(GP)。目前面向对象的地位已经远远没有泛型重要了。说到底,不论采用什么编程范式,核心在于减少语言层面引入的额外复杂性,用最直接的方式来描述解决问题的数学模型。近些年C++仍在不断发展进步中,初学者接触到的代码中有很多坏的榜样,千万不要沉迷于面向对象的概念中,动不动就搞一套繁复的class系统,更不要去研究什么设计模式,那东西已经过时十年以上了。学会使用一些优秀的第三方库,而不要浪费时间重复造轮子。

1 0
支持者: 方程

只学过c和java没学过c++,但确实回答就是「前者面向过程后者面向对象」。
关于面向过程和面向对象的区别我想网上应该有很多不错的文章我就不长篇大论了,简单的讲下自己的理解。

面向过程楼主应该知道了,程序一步一步按你的代码执行,运行整个程序就像走完一个过程。
面向对象的话,我们会把很多东西当做对象来处理。对象是什么?女朋友吗?当然不是,对象是object。
object又是什么?几乎所有东西都可以当成object(废话,object本来就是“东西”)。int,string可以是object,进程可以是object,人,电脑也可以是object,总之object就是一个框,什么都能往里装。

那这object有什么特性呢?每个object有自己的属性自带操作方法。比如一个汽车的object,它有车的尺寸属性,颜色属性等等,你可以对其进行:启动,踩油门,刹车等操作。

比如当你mystring = new string()新建了一个string object之后,你可以通过mystring.length获得mystring的长度。而在面对过程中,你需要这么写length(mystring)。你可以通过执行mystring.sort()对这个mystring进行排序,而在面对过程的编程中,你得这么写mystring = sort(mystring)。

也就是说在面对对象编程中,你面对的是一个对象(object),你创建对象,然后对对象进行处理和操作。在面对过程中,你不会把int, string 什么的看成是对象(object),你只关心通过怎样的几句代码等得到想要的输出。

本人水平有限,以上都是瞎扯的,一切还是以网上其他大神的答案为准。

1 0
支持者: 方程

给我乖乖看 c++ primier去

当然如果你连C都不会
或者长期把C妄想或者幻想成c++,那你还是果断转向c++吧

0 0

如果没什么基础,先从C开始入门吧。C++语言本身包含的东西很多很杂,对初学者来说不是太好上手。C语言出现年代更早且C++设计的时候就是要在C上添加面向对象支持。C语言的语法规范大致上是C++的一个子集,语法简单,没有C++的各种让人困惑的高级特性,学起来相对简单直接。我是大学计算机 专业的,987300192,我Q,欢迎交流

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字第朝200003号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区