C与C++的区别

时间:2022-09-09 18:22:15
我是个初学者,请问大家C与C++有什么不一样吗?我学过C自己学的。还有C#。

131 个解决方案

#1


模板等..

#2


能有什么不一样,不就是中文,日文和英文的区别,都是为了交流用。
中文日文英文是给人交流,
c,c++是给机器交流。

#3


C和C++是两种不同的语言,只是语法上有部分相似.

#4


一个是面向过程,一个是面向对象

#5



C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C++完美地体现了面向对象的各种特性。 

Bjarne Stroustrup(C++的设计者)对C++的设计和演化的描述
C++的设计和演化(The Design and Evolution of C++)
  C++程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup(即本文作者)设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言设施。C++最初的版本被称作“带类的C(C with classes)”[Stroustrup,1980],在1980年被第一次投入使用;当时它只支持系统程序设计(§3)和数据抽象技术(§4.1)。支持面向对象程序设计的语言设施在1983年被加入C++;之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了C++领域。在1985年,C++第一次投入商业市场[Stroustrup,1986][Stroustrup,1986b]。在1987至1989年间,支持范型程序设计的语言设施也被加进了C++[Ellis,1990][Stroustrup,1991]。
  随着若干独立开发的C++实现产品的出现和广泛应用,正式的C++标准化工作在1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式发布了C++语言的国际标准[C++,1998]。在标准化工作进展期间,标准委员会充当了一个重要的角色,其发布的C++标准之草案在正式标准发布之前,一直被作为过渡标准而存在。而作为标准委员会中的积极分子,我是C++进一步发展工作中的主要参与者。与以前的C++语言版本相比,标准C++更接近我理想中的那个C++语言了。关于C++的设计和演化,在[Stroustrup,1994]、[Stroustrup,1996]和[Stroustrup,1997b]中有详细的叙述。至于标准化工作末期产生的C++语言定义,在[Stroustrup,1997]有详细叙述。
1  C++的设计目标(C++ Design Aims)
  C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具有的可适应性和高效性,又能在其程序组织结构方面具有像Simula那样的语言设施(Simula所支持的这种程序组织结构通常被称为面向对象程序设计风格)。在设计的时候,还做了很大的努力,使得引借自Simula的高层次的程序设计技术能够应用于系统程序设计之中。这即是说,C++所提供的抽象机制能够被应用于那些对效率和可适应性具有极高要求的程序设计任务之中。
上述的C++之设计目标可以小结如下:
[设计目标]
l         l 对于要解决实际问题的程序员而言,C++使程序设计变得更有乐趣;
l         l C++是一门通用目的的程序设计语言,它:
  ——是一个更好的C;
  ——支持数据抽象;
  ——支持面向对象程序设计;
  ——支持范型程序设计。
对范型程序设计的支持在C++设计的后期才被作为一个明确、独立的目标来实现。而在C++演化过程的大部分时间里,我一直把范型程序设计以及支持它的语言特性划归在“数据抽象”的大标题之下。
2  C++的设计原则(Design Principles)
在[Stroustrup,1994]中,C++的设计规则被分为基本规则、基于设计的规则、语言的技术性规则以及基于低层次程序设计的规则四个方面,分列在下文中。
[基本规则(General rules)]
l         l C++的每一步演化和发展必须是由于实际问题所引起的;
l         l C++是一门语言,而不是一个完整的系统;
l         l 不能无休止的一味追求完美;
l         l C++在其存在的“当时”那个时期必须是有用处的;
l         l 每一种语言特性必须有一个有根据的、明确的实现方案;
l         l 总能提供一种变通的方法;
l         l 能为意欲支持的每一种程序设计风格提供易于理解的支持方法;
l         l 不强制于人。

  可以注意到,基本规则的最后三条暗示了两点:对适用于真实世界中各种应用的便捷工具的强调;对程序员的技术和取向(偏好)的充分考虑。从一开始,C++面向的就是那些要做实际项目的程序员。所谓的“完美”被认为是不可能达到的,这是由于C++用户在需求、背景和待解决问题上存在着太大的不同。况且,在一门通用目的的程序设计语言的整个生存期之内,连对“完美”一词的诠释都可能会有极大的改变。由此可知,在语言的演化过程中,来自用户的反馈和语言实现者们积累的经验才是最为重要的。

[基于设计的规则(Design-support rules)]
l         l 支持良好的设计方案;
l         l 提供用于程序组织的语言设施;
l         l 心口如一(Say what you mean);
l         l 所有的语言特性必须具有切实有效的承受能力;
l         l 开启一个有用的特性比避免所有的误用更为重要;
l         l 能将独立开发的部件组合成完整的软件。
C++的一个目标就是提供更易用并具有一定承受能力的设计思想和程序设计技术,进一步提高程序的质量。这些技术中的绝大部分都源自Simula [Dahl,1970][Dahl,1972][Birtwistle,1979],并通常被作为面向对象程序设计和面向对象设计思想来讨论。然而,C++的设计目标总还是在于要支持一定范围内的各种程序设计风格和设计思想。这与一般在语言设计方面的观点形成一定对比。一般在语言设计上总是试图将所有系统内建于单独一个被重点支持的、带有强制性的程序设计风格之中(或称典范paradigm)。
[语言的技术性规则(Language-technical rules)]
l         l 与静态型别系统(Static type system)没有内在的冲突;
l         l 像对内建(built-in)型别一样对用户自定义型别提供很好的支持;
l         l 个异化(locality)行为是可取的;
l         l 避免产生顺序上的依赖关系;
l         l 在对语言产生疑惑时,可以选取其特性中最易掌握的部分;
l         l 可以因为不正当的语法使用而产生问题(Syntax matters (often in perverse ways))
l         l 削弱对预处理器的使用。
  当然,这些规则要具体结合更多关于基本目标的上下文环境来考虑。应该注意到的是,在“与C有较高的兼容性”、“不损失效率”以及“具有便捷的可用性来解决实际问题”这三个方面的要求,与在“完整的型别安全性”、“完全的通用性”以及“完善的抽象之美”这三个方面的要求形成对立。
  C++从Simula中借鉴了用户自定义型别(class,§4.1)和类层次机制。然而,在Simula及许多类似的语言中,其对用户自定义型别的支持与其对内建型别的支持存在着根本上的不同。例如,Simula中不允许在栈中为用户自定义型别的对象分配空间,并且只允许通过指针(这在Simula中称为引用——reference)来对这些对象进行访问。而相反的,内建型别的对象只在栈中被分配空间,不能在动态存储区中分配,而且不能使用指针指向它。这种在对待内建型别与对待用户自定义型别上的差异,暗示着对效率问题的严格考虑。比如,当作为一个在动态存储区中被分配的对象之引用时,如果该对象属于自定义型别(比如complex,§4.1),那么就会为运行期及空间带来负荷;而这些负荷在有些应用中被认为是不可接受的。这些正是C++意欲涉足解决的问题。同时,在用法上的不同也决定了:不可能在范型程序设计中统一对待那些语义上近似的型别。
  在维护一个较庞大的程序时,一个程序员不可避免的会基于某些不完整的知识来对程序作一些修改,只关注全部程序代码中的一小部分。
基于此,C++提供了class(§4)、namespace(§5.2)和访问控制(§4.1),使设计决策的各异化(locality)成为可能。
  在基于一趟编译(one-pass compilation)的语言中,某些顺序上的依赖性是不可避免的。例如在C++中,一个变量或者函数在其被声明之前是无法使用的。然而,C++中类成员的名字规则和重载解析(overload resolution)的规则还是在独立于声明顺序的原则下被制定出来,以便将发生混乱和错误的可能性降至最低。
[基于低层次程序设计的规则(Low-level programming support rules)]
l         l 使用传统的(笨拙的)连接器(linker);
l         l 与C语言不存在无故的不兼容性;
l         l 不给C++之下层级的更低层语言留出余地(汇编语言除外);
l         l 你不会为你所不使用的部分付出代价(零负荷规则);
l         l 在产生疑惑时,能提供完全自主控制的途径。
  在C++的设计中只要在不严重影响其对强型别检查(strong type checking)的支持的地方,都尽量做到与C的“source-link”方式相兼容。除了某些微小的细节差别之外,C++将C[Kernighan,1978][Kernighan,1988]作为一个子集包含了进来。C++与C的兼容性使得C++程序员立刻就能有一个完整的语言和工具集可用。还有两点也很重要,一是有大量关于C的高质量的教学素材已经存在,二是C++程序员可以利用C++与C的兼容性而直接并有效的使用大量现成的程序库。在决定将C作为C++的基础的时候,C还没有像后来那样出类拔萃、炙手可热,所以在考虑这个问题的时候,与C语言所提供的可适应性和高效性相比,C语言的流行程度只是个次要的考虑因素。
然而,与C的兼容性也使得C++在某些语法和语义上保留了C的一些瑕疵之处。比如,C语言的声明语法就实在远不及优美;而其内建型别的隐式转换规则也是混乱无章法的。还有另一个大问题,就是许多从C转向C++的程序员并没有认识到,代码质量上的显著提高只能通过在程序设计风格上的显著改变来达到。   

#6


最初的 C++ 是 C + OO

后来两者的差别大了

#7


引用 4 楼 jingjing_123 的回复:
一个是面向过程,一个是面向对象

#8


引用 4 楼 jingjing_123 的回复:
一个是面向过程,一个是面向对象

不完全如此
c++可以简单理解为 c + oop + gp 

#9


oop 是一种思想,和语言没多大关系!

说c是面向过程,cpp是面向对象,我不认同!

#10


不会,帮顶

#11


首先名字不同
其次是两种不同的语言,面向开发的重点是不同的
其次次是面向过程和面向对象的不同
C++有很多优秀的模板,支持比较高级的开发
而C的主要特点是指针,当然还可能是宏,对于一个做嵌入式的人来说经常会用C写宏
~~~还有很多以后再说 HEHE

#12


c是经典的结构化编程语言
c++兼容c,但是在其基础上增加了面向对象的思想
支持封装、继承、多态、重载和模板机制

#13


一个底层应用,一个上层应用

#14


C++一开始被称为带类的c,这就是最大的区别.

#15


谷歌关键词:


1、 面向过程编程  
2、 面向对象编程
3、 继承和多态
4、 STL模板

#16


最大区别 类 

#17


C++ 比 C 多了2个+

#18


C是C,C++是C++

#19


这个问题问得太宽泛了,你应该多查阅一些资料,多进行一些实习才能发现区别

#20


c++是对c的扩展,c++相对于c增加了封装、继承、多态

#21


除去面向过程和面向对象的区别,就是类了

#22


引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+


英雄所见略同...

#23


懂C的人,能快速理解别的语言,所以,没必要太在于它们区别,好好学好一种语言就行了

#24


  个人感觉C做底层的时候比较强大,向嵌入式发展的话,学精很有必要,C++做什么都可以实现,但是有些地方做的时候非常麻烦,需要大牛级别的人来做,而且C++做游戏时很厉害,C#这个东西可以参考JAVA,就这样啦

#25


ksk  !

#26


只知道一个是面向过程,一个面向对象.两者稍微有一点相似的地方.

#27


引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+

......

#28


我看著名的The C++ Programming Language.
不建议先学C。
主要是思想上的不同吧。
有很多C里常见的。
被C++摒弃的。
你看我提到的那本书。
就应该大概理解了吧。 

#29


差别太大了,不是三言两语能够说清楚的。

#30


引用 22 楼 tnfyj 的回复:
引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+ 
 

英雄所见略同...

up

#31


up

#32


up

#33


c++就是c的增强版。类是c++的灵魂。

#34


C++增加了面向对象的思想,没有什么大的区别

#35


关键区别是思想。C++让你用对象的思维考虑问题

#36


反正两种最好都学会。

#37


建议初学者就踏踏实实学,别人告诉你的区别你也不理解,还不如学好后自己来理解其区别。
http://www.shubulo.com/forum-198-1.html
C/C++学习小组

#38


引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+
.

#39


该回复于2009-03-16 01:30:14被版主删除

#40


其实很多程序员用C++写C一样的代码.
动不动就是全局变量和全局函数.

#41


为了搞清楚这个区别,建议使用C来实现C++的类.

#42


C=数据结构+算法

对象=数据结构+算法
C=对象+对象+对象...

#43


说实话,真能把这个问题搞的非常明白,LZ你就神了

#44


引用 43 楼 NewayMoon 的回复:
说实话,真能把这个问题搞的非常明白,LZ你就神了

当神那么容易- -

#45


研究透了二者编译原理的区别,就能体会二者的根本不同

#46


C语言只是C++语言的一部分.

比如"C语言是男人",那么"C++是人"

#47



你好!希望我的回答能给你一些启发。 
C语言是结构化和模块化的面向过程的语言,C++语言是面向对象的程序设计语言。C++语言是C语言的超集,也就是说学会了C++,你其实已经把C语言学会了。至于说有什么区别,应该说是编程思想的区别吧,C是基于过程的,强调的是程序的功能,以函数(功能)为中心。C++是面向对象的,强调程序的分层、分类,以抽象为基础,进行对象的定义与展示,即程序设计。具体说来话长。建议你学习C++的时候,学会用面向对象的方式思考和编程。现在在开发大项目的时候,都是应用面向对象的分析和设计的技术。 


C和C++的区别有什么 
今天在网易上看到有人问C和C++的区别有什么,在这里简略说点. 
其他的东西都不需要多说,就象类,继承,引用等,大家都知道. 
这里讲的是调用编译的区别.大家看WIN32 SDK的头文件,总是可以看到 

ifdef __cplusplus 
extern "C" 

endif 

ifdef __cplusplus 


endif 

这个就是直接能够体现实际编程时区别的地方. 在WIN系列下.所有的WIN32 SDK提供的LIB都是以C的形式存在的.当然,C和C++同样都支持C,STDCALL,FASTCALL调用.为什么系统提供C编译器编译的LIB而不是C++编译的LIB呢?这里其实就是C和C++编译器不同的地方. 

所有的函数名称只有在汇编编译器下才最清楚.因为经汇编编译器编译的函数不经过任何修饰. 
C 的编译器编译出来的函数名称如果在汇编编译器看来一个C调用将在函数名前家下划线('_').而一个STDCALL的函数将是_FUNC@NUMBER的形式.如FUNC(void)经过编译器后成为_FUNC@0.一个FASTCALL调用的函数被编译成@FUNC@0.顺便提一下.在WIN32的编译器里不再需要PASCALL调用.VC6已经取消了对PASCALL的支持. 
光看C的编译还不够,看一下C++编译器是怎么干的.在缺省情况下.一个C++的函数经过C++编译器后编译出的函数名包括函数名,所属的类,参数类型,调用约定,返回类型.而且更要命的是这么多的信息,只有函数名和类名在编译后还依稀可见.其他就是一长串的ABCD字母,根本就是无法辨认其意义的.我们在VC手册里可以看到 

一个例子: 

void __stdcall b::c(float); -----------> ?c@b@@QAGXM@Z 
一个函数被编译得连名字也不知道怎么样了.这么一来.如果SDK提供的是C++编译器提供了LIB.那么可以说就无法编译任何一个完整的WIN程序.更加不用说什么混合语言编程. 

现在,VC编译器提供了个extern语句.当出现extern 'C'语句,括号里的函数将以C方式经过编译器.从而使提供库程序方便那么点. 



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++中它没有加限定符的为私有的。 
4,C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。 
5,C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。 
6,C++中的IDE很智能,和VB一样,有的功能可能比VB还强。 
7,C++对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入MFC中的类的时候,加入变量的时候等等。 
8,C++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。 
9,调试功能强大,并且方法多样。 

以上原文连接: http://zhidao.baidu.com/question/5815689.html
引用 37 楼 imdemon 的回复:
建议初学者就踏踏实实学,别人告诉你的区别你也不理解,还不如学好后自己来理解其区别。 
http://www.shubulo.com/forum-198-1.html 
C/C++学习小组

37楼说的很有道理,事实上同样的书,不同的人看有不同的理解。
比如函数和方法:有的人认为是一个意思;有的人坚持定义在类里面的的函数才叫方法;有的人理解为不管在哪,只要是实现了一个功能(比如计算,文件转换、保存等处理)的函数就可以叫方法。
再比如说C++和C的不同:1.多了类 2.引入了继承封装和多态的概念 3.C是面向过程而C++是面向对象
这三种说法其实是一个意思。因为面向对象的特点就是继承封装和多态,而这些都是通过类体现出来的。
所以学习固然应该,交流才更重要。

#48


我也是刚刚自学的c,大家都是,想要跨专业学点东西

#49


引用 46 楼 APIandMFC 的回复:
C语言只是C++语言的一部分. 

比如"C语言是男人",那么"C++是人" 


不同意,因为C++和C的主张不同,比如C++这个人把C男人的JJ屏弃了

#50


c++是面向对象 而c只是面向过程 c++有了stl

#1


模板等..

#2


能有什么不一样,不就是中文,日文和英文的区别,都是为了交流用。
中文日文英文是给人交流,
c,c++是给机器交流。

#3


C和C++是两种不同的语言,只是语法上有部分相似.

#4


一个是面向过程,一个是面向对象

#5



C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C++完美地体现了面向对象的各种特性。 

Bjarne Stroustrup(C++的设计者)对C++的设计和演化的描述
C++的设计和演化(The Design and Evolution of C++)
  C++程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup(即本文作者)设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言设施。C++最初的版本被称作“带类的C(C with classes)”[Stroustrup,1980],在1980年被第一次投入使用;当时它只支持系统程序设计(§3)和数据抽象技术(§4.1)。支持面向对象程序设计的语言设施在1983年被加入C++;之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了C++领域。在1985年,C++第一次投入商业市场[Stroustrup,1986][Stroustrup,1986b]。在1987至1989年间,支持范型程序设计的语言设施也被加进了C++[Ellis,1990][Stroustrup,1991]。
  随着若干独立开发的C++实现产品的出现和广泛应用,正式的C++标准化工作在1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式发布了C++语言的国际标准[C++,1998]。在标准化工作进展期间,标准委员会充当了一个重要的角色,其发布的C++标准之草案在正式标准发布之前,一直被作为过渡标准而存在。而作为标准委员会中的积极分子,我是C++进一步发展工作中的主要参与者。与以前的C++语言版本相比,标准C++更接近我理想中的那个C++语言了。关于C++的设计和演化,在[Stroustrup,1994]、[Stroustrup,1996]和[Stroustrup,1997b]中有详细的叙述。至于标准化工作末期产生的C++语言定义,在[Stroustrup,1997]有详细叙述。
1  C++的设计目标(C++ Design Aims)
  C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具有的可适应性和高效性,又能在其程序组织结构方面具有像Simula那样的语言设施(Simula所支持的这种程序组织结构通常被称为面向对象程序设计风格)。在设计的时候,还做了很大的努力,使得引借自Simula的高层次的程序设计技术能够应用于系统程序设计之中。这即是说,C++所提供的抽象机制能够被应用于那些对效率和可适应性具有极高要求的程序设计任务之中。
上述的C++之设计目标可以小结如下:
[设计目标]
l         l 对于要解决实际问题的程序员而言,C++使程序设计变得更有乐趣;
l         l C++是一门通用目的的程序设计语言,它:
  ——是一个更好的C;
  ——支持数据抽象;
  ——支持面向对象程序设计;
  ——支持范型程序设计。
对范型程序设计的支持在C++设计的后期才被作为一个明确、独立的目标来实现。而在C++演化过程的大部分时间里,我一直把范型程序设计以及支持它的语言特性划归在“数据抽象”的大标题之下。
2  C++的设计原则(Design Principles)
在[Stroustrup,1994]中,C++的设计规则被分为基本规则、基于设计的规则、语言的技术性规则以及基于低层次程序设计的规则四个方面,分列在下文中。
[基本规则(General rules)]
l         l C++的每一步演化和发展必须是由于实际问题所引起的;
l         l C++是一门语言,而不是一个完整的系统;
l         l 不能无休止的一味追求完美;
l         l C++在其存在的“当时”那个时期必须是有用处的;
l         l 每一种语言特性必须有一个有根据的、明确的实现方案;
l         l 总能提供一种变通的方法;
l         l 能为意欲支持的每一种程序设计风格提供易于理解的支持方法;
l         l 不强制于人。

  可以注意到,基本规则的最后三条暗示了两点:对适用于真实世界中各种应用的便捷工具的强调;对程序员的技术和取向(偏好)的充分考虑。从一开始,C++面向的就是那些要做实际项目的程序员。所谓的“完美”被认为是不可能达到的,这是由于C++用户在需求、背景和待解决问题上存在着太大的不同。况且,在一门通用目的的程序设计语言的整个生存期之内,连对“完美”一词的诠释都可能会有极大的改变。由此可知,在语言的演化过程中,来自用户的反馈和语言实现者们积累的经验才是最为重要的。

[基于设计的规则(Design-support rules)]
l         l 支持良好的设计方案;
l         l 提供用于程序组织的语言设施;
l         l 心口如一(Say what you mean);
l         l 所有的语言特性必须具有切实有效的承受能力;
l         l 开启一个有用的特性比避免所有的误用更为重要;
l         l 能将独立开发的部件组合成完整的软件。
C++的一个目标就是提供更易用并具有一定承受能力的设计思想和程序设计技术,进一步提高程序的质量。这些技术中的绝大部分都源自Simula [Dahl,1970][Dahl,1972][Birtwistle,1979],并通常被作为面向对象程序设计和面向对象设计思想来讨论。然而,C++的设计目标总还是在于要支持一定范围内的各种程序设计风格和设计思想。这与一般在语言设计方面的观点形成一定对比。一般在语言设计上总是试图将所有系统内建于单独一个被重点支持的、带有强制性的程序设计风格之中(或称典范paradigm)。
[语言的技术性规则(Language-technical rules)]
l         l 与静态型别系统(Static type system)没有内在的冲突;
l         l 像对内建(built-in)型别一样对用户自定义型别提供很好的支持;
l         l 个异化(locality)行为是可取的;
l         l 避免产生顺序上的依赖关系;
l         l 在对语言产生疑惑时,可以选取其特性中最易掌握的部分;
l         l 可以因为不正当的语法使用而产生问题(Syntax matters (often in perverse ways))
l         l 削弱对预处理器的使用。
  当然,这些规则要具体结合更多关于基本目标的上下文环境来考虑。应该注意到的是,在“与C有较高的兼容性”、“不损失效率”以及“具有便捷的可用性来解决实际问题”这三个方面的要求,与在“完整的型别安全性”、“完全的通用性”以及“完善的抽象之美”这三个方面的要求形成对立。
  C++从Simula中借鉴了用户自定义型别(class,§4.1)和类层次机制。然而,在Simula及许多类似的语言中,其对用户自定义型别的支持与其对内建型别的支持存在着根本上的不同。例如,Simula中不允许在栈中为用户自定义型别的对象分配空间,并且只允许通过指针(这在Simula中称为引用——reference)来对这些对象进行访问。而相反的,内建型别的对象只在栈中被分配空间,不能在动态存储区中分配,而且不能使用指针指向它。这种在对待内建型别与对待用户自定义型别上的差异,暗示着对效率问题的严格考虑。比如,当作为一个在动态存储区中被分配的对象之引用时,如果该对象属于自定义型别(比如complex,§4.1),那么就会为运行期及空间带来负荷;而这些负荷在有些应用中被认为是不可接受的。这些正是C++意欲涉足解决的问题。同时,在用法上的不同也决定了:不可能在范型程序设计中统一对待那些语义上近似的型别。
  在维护一个较庞大的程序时,一个程序员不可避免的会基于某些不完整的知识来对程序作一些修改,只关注全部程序代码中的一小部分。
基于此,C++提供了class(§4)、namespace(§5.2)和访问控制(§4.1),使设计决策的各异化(locality)成为可能。
  在基于一趟编译(one-pass compilation)的语言中,某些顺序上的依赖性是不可避免的。例如在C++中,一个变量或者函数在其被声明之前是无法使用的。然而,C++中类成员的名字规则和重载解析(overload resolution)的规则还是在独立于声明顺序的原则下被制定出来,以便将发生混乱和错误的可能性降至最低。
[基于低层次程序设计的规则(Low-level programming support rules)]
l         l 使用传统的(笨拙的)连接器(linker);
l         l 与C语言不存在无故的不兼容性;
l         l 不给C++之下层级的更低层语言留出余地(汇编语言除外);
l         l 你不会为你所不使用的部分付出代价(零负荷规则);
l         l 在产生疑惑时,能提供完全自主控制的途径。
  在C++的设计中只要在不严重影响其对强型别检查(strong type checking)的支持的地方,都尽量做到与C的“source-link”方式相兼容。除了某些微小的细节差别之外,C++将C[Kernighan,1978][Kernighan,1988]作为一个子集包含了进来。C++与C的兼容性使得C++程序员立刻就能有一个完整的语言和工具集可用。还有两点也很重要,一是有大量关于C的高质量的教学素材已经存在,二是C++程序员可以利用C++与C的兼容性而直接并有效的使用大量现成的程序库。在决定将C作为C++的基础的时候,C还没有像后来那样出类拔萃、炙手可热,所以在考虑这个问题的时候,与C语言所提供的可适应性和高效性相比,C语言的流行程度只是个次要的考虑因素。
然而,与C的兼容性也使得C++在某些语法和语义上保留了C的一些瑕疵之处。比如,C语言的声明语法就实在远不及优美;而其内建型别的隐式转换规则也是混乱无章法的。还有另一个大问题,就是许多从C转向C++的程序员并没有认识到,代码质量上的显著提高只能通过在程序设计风格上的显著改变来达到。   

#6


最初的 C++ 是 C + OO

后来两者的差别大了

#7


引用 4 楼 jingjing_123 的回复:
一个是面向过程,一个是面向对象

#8


引用 4 楼 jingjing_123 的回复:
一个是面向过程,一个是面向对象

不完全如此
c++可以简单理解为 c + oop + gp 

#9


oop 是一种思想,和语言没多大关系!

说c是面向过程,cpp是面向对象,我不认同!

#10


不会,帮顶

#11


首先名字不同
其次是两种不同的语言,面向开发的重点是不同的
其次次是面向过程和面向对象的不同
C++有很多优秀的模板,支持比较高级的开发
而C的主要特点是指针,当然还可能是宏,对于一个做嵌入式的人来说经常会用C写宏
~~~还有很多以后再说 HEHE

#12


c是经典的结构化编程语言
c++兼容c,但是在其基础上增加了面向对象的思想
支持封装、继承、多态、重载和模板机制

#13


一个底层应用,一个上层应用

#14


C++一开始被称为带类的c,这就是最大的区别.

#15


谷歌关键词:


1、 面向过程编程  
2、 面向对象编程
3、 继承和多态
4、 STL模板

#16


最大区别 类 

#17


C++ 比 C 多了2个+

#18


C是C,C++是C++

#19


这个问题问得太宽泛了,你应该多查阅一些资料,多进行一些实习才能发现区别

#20


c++是对c的扩展,c++相对于c增加了封装、继承、多态

#21


除去面向过程和面向对象的区别,就是类了

#22


引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+


英雄所见略同...

#23


懂C的人,能快速理解别的语言,所以,没必要太在于它们区别,好好学好一种语言就行了

#24


  个人感觉C做底层的时候比较强大,向嵌入式发展的话,学精很有必要,C++做什么都可以实现,但是有些地方做的时候非常麻烦,需要大牛级别的人来做,而且C++做游戏时很厉害,C#这个东西可以参考JAVA,就这样啦

#25


ksk  !

#26


只知道一个是面向过程,一个面向对象.两者稍微有一点相似的地方.

#27


引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+

......

#28


我看著名的The C++ Programming Language.
不建议先学C。
主要是思想上的不同吧。
有很多C里常见的。
被C++摒弃的。
你看我提到的那本书。
就应该大概理解了吧。 

#29


差别太大了,不是三言两语能够说清楚的。

#30


引用 22 楼 tnfyj 的回复:
引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+ 
 

英雄所见略同...

up

#31


up

#32


up

#33


c++就是c的增强版。类是c++的灵魂。

#34


C++增加了面向对象的思想,没有什么大的区别

#35


关键区别是思想。C++让你用对象的思维考虑问题

#36


反正两种最好都学会。

#37


建议初学者就踏踏实实学,别人告诉你的区别你也不理解,还不如学好后自己来理解其区别。
http://www.shubulo.com/forum-198-1.html
C/C++学习小组

#38


引用 17 楼 zhkefa 的回复:
C++ 比 C 多了2个+
.

#39


该回复于2009-03-16 01:30:14被版主删除

#40


其实很多程序员用C++写C一样的代码.
动不动就是全局变量和全局函数.

#41


为了搞清楚这个区别,建议使用C来实现C++的类.

#42


C=数据结构+算法

对象=数据结构+算法
C=对象+对象+对象...

#43


说实话,真能把这个问题搞的非常明白,LZ你就神了

#44


引用 43 楼 NewayMoon 的回复:
说实话,真能把这个问题搞的非常明白,LZ你就神了

当神那么容易- -

#45


研究透了二者编译原理的区别,就能体会二者的根本不同

#46


C语言只是C++语言的一部分.

比如"C语言是男人",那么"C++是人"

#47



你好!希望我的回答能给你一些启发。 
C语言是结构化和模块化的面向过程的语言,C++语言是面向对象的程序设计语言。C++语言是C语言的超集,也就是说学会了C++,你其实已经把C语言学会了。至于说有什么区别,应该说是编程思想的区别吧,C是基于过程的,强调的是程序的功能,以函数(功能)为中心。C++是面向对象的,强调程序的分层、分类,以抽象为基础,进行对象的定义与展示,即程序设计。具体说来话长。建议你学习C++的时候,学会用面向对象的方式思考和编程。现在在开发大项目的时候,都是应用面向对象的分析和设计的技术。 


C和C++的区别有什么 
今天在网易上看到有人问C和C++的区别有什么,在这里简略说点. 
其他的东西都不需要多说,就象类,继承,引用等,大家都知道. 
这里讲的是调用编译的区别.大家看WIN32 SDK的头文件,总是可以看到 

ifdef __cplusplus 
extern "C" 

endif 

ifdef __cplusplus 


endif 

这个就是直接能够体现实际编程时区别的地方. 在WIN系列下.所有的WIN32 SDK提供的LIB都是以C的形式存在的.当然,C和C++同样都支持C,STDCALL,FASTCALL调用.为什么系统提供C编译器编译的LIB而不是C++编译的LIB呢?这里其实就是C和C++编译器不同的地方. 

所有的函数名称只有在汇编编译器下才最清楚.因为经汇编编译器编译的函数不经过任何修饰. 
C 的编译器编译出来的函数名称如果在汇编编译器看来一个C调用将在函数名前家下划线('_').而一个STDCALL的函数将是_FUNC@NUMBER的形式.如FUNC(void)经过编译器后成为_FUNC@0.一个FASTCALL调用的函数被编译成@FUNC@0.顺便提一下.在WIN32的编译器里不再需要PASCALL调用.VC6已经取消了对PASCALL的支持. 
光看C的编译还不够,看一下C++编译器是怎么干的.在缺省情况下.一个C++的函数经过C++编译器后编译出的函数名包括函数名,所属的类,参数类型,调用约定,返回类型.而且更要命的是这么多的信息,只有函数名和类名在编译后还依稀可见.其他就是一长串的ABCD字母,根本就是无法辨认其意义的.我们在VC手册里可以看到 

一个例子: 

void __stdcall b::c(float); -----------> ?c@b@@QAGXM@Z 
一个函数被编译得连名字也不知道怎么样了.这么一来.如果SDK提供的是C++编译器提供了LIB.那么可以说就无法编译任何一个完整的WIN程序.更加不用说什么混合语言编程. 

现在,VC编译器提供了个extern语句.当出现extern 'C'语句,括号里的函数将以C方式经过编译器.从而使提供库程序方便那么点. 



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++中它没有加限定符的为私有的。 
4,C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。 
5,C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。 
6,C++中的IDE很智能,和VB一样,有的功能可能比VB还强。 
7,C++对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入MFC中的类的时候,加入变量的时候等等。 
8,C++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。 
9,调试功能强大,并且方法多样。 

以上原文连接: http://zhidao.baidu.com/question/5815689.html
引用 37 楼 imdemon 的回复:
建议初学者就踏踏实实学,别人告诉你的区别你也不理解,还不如学好后自己来理解其区别。 
http://www.shubulo.com/forum-198-1.html 
C/C++学习小组

37楼说的很有道理,事实上同样的书,不同的人看有不同的理解。
比如函数和方法:有的人认为是一个意思;有的人坚持定义在类里面的的函数才叫方法;有的人理解为不管在哪,只要是实现了一个功能(比如计算,文件转换、保存等处理)的函数就可以叫方法。
再比如说C++和C的不同:1.多了类 2.引入了继承封装和多态的概念 3.C是面向过程而C++是面向对象
这三种说法其实是一个意思。因为面向对象的特点就是继承封装和多态,而这些都是通过类体现出来的。
所以学习固然应该,交流才更重要。

#48


我也是刚刚自学的c,大家都是,想要跨专业学点东西

#49


引用 46 楼 APIandMFC 的回复:
C语言只是C++语言的一部分. 

比如"C语言是男人",那么"C++是人" 


不同意,因为C++和C的主张不同,比如C++这个人把C男人的JJ屏弃了

#50


c++是面向对象 而c只是面向过程 c++有了stl