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++的区别有什么?其他的东西都不需要多说,就象类,继承,引用等,大家都知道。这里讲的是调用编译的区别.大家看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的函数将是[email=_FUNC@NUMBER]_FUNC@NUMBER[/email]的形式,如FUNC(void)经过编译器后成为[email=_FUNC@0]_FUNC@0[/email]。一个FASTCALL调用的函数被编译成@FUNC@0。顺便提一下,在WIN32的编译器里不再需要PASCALL调用,VC6已经取消了对PASCALL的支持.

光看C的编译还不够,看一下C++编译器是怎么干的。在缺省情况下,一个C++的函数经过C++编译器后编译出的函数名包括函数名,所属的类,参数类型,调用约定,返回类型。而且更要命的是这么多的信息,只有函数名和类名在编译后还依稀可见,其他就是一长串的ABCD字母,根本就是无法辨认其意义的。我们在VC手册里可以看到一个例子:

void __stdcall b::c(float); -----------> [email=?c@b@@QAGXM@Z]?c@b@@QAGXM@Z[/email]

一个函数被编译得连名字也不知道怎么样了.这么一来.如果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++中的。C语言标准中不包括图形处理。

4,C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。

4,C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOS的程序,写DLL,写控件,写系统。

5,C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。

6,C++中的IDE很智能,和VB一样,有的功能可能比VB还强。

7,C++对可以自动生成你想要的程序结构使你可以省很多时间。有很多可用工具如加入MFC中的类的时候,加入变量的时候等等。

8,C++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。

9,调试功能强大,并且方法多样。

C语言:20世纪70年代早期,贝尔实验室的Dennis Ritchie致力于开发UNIX操作系统。为完成这项工作,Ritchie需要一种语言,它必须简洁,能够生成简洁、快速的程序,并能有效地控制硬件。当时应用的语言是汇编语言,它依赖于特定的机器,移植性非常差。而UNIX需要运行在不同的机器上,也就是说它是一种高级语言,不需要针对特定的硬件。一种被称为编译器的特殊程序将高级语言翻译成特定的计算机的内部语言。Richie希望有一种语言能将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合在一起,于是他在旧语言的基础上开发了C语言。

C++语言:C++在C语言的基础上移植了新的编程理念,因此我们首先来看一看C所遵循的旧的理念。一般来说,计算机语言要处理两个概念----数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。C语言和当前最流行的语言一样,在最初面世时也是过程性(procedural)语言,这意味着它强调的是编程的算法方面。

从概念上讲,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现这些操作。

随着程序规模的扩大,早期的程序语言(如FROTRAN和BASIC)都会遇到组织方面的问题,如经常使用分支等。使人们不可能通过阅读程序来理解它。为了解决这个问题,计算机科学家开发了一种更有序的编程方法----结构化编程(structured programming)。C语言就具有使用这种方法的特性。

另一个新的原则是自顶向下(top-down)的设计。在C语言中,其理念是将大型的程序分解成小型、便于管理的任务,如果其中的一项仍然过大,则继续分解。C语言的这种设计有助于使用这种方法,它鼓励程序员开发程序单元(称为函数)来表示各个任务模块。

由于C++在C语言的基础上移植了新的编程理念,因此我们首先来看一看C所遵循的旧的理念。一般来说,计算机语言要处理两个概念----数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。C语言和当前最流行的语言一样,在最初面世时也是过程性(procedural)语言,这意味着它强调的是编程的算法方面。

从概念上讲,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现这些操作。

和C语言一样,C++也是在贝尔实验室诞生的,Bjarne Stroustrup于20世纪80年代在这里开发出了这种语言。

C++的OOP方面是受到了计算机模拟语言Simula67的启发。Stroustrup加入了OOP特性和对C的通用编程支持,但并没有C的组件作很大的改动。因此,C++是语言的超集,这意味着任何有效的C程序都是有效的C++程序。他们之间有些细微的差异,但无足轻重。C++程序可以使用已有的C软件库

名称C++来自C语言中的传递操作符++,该操作符将变量加1。名称C++表明,它是C的扩充版本。

PS:我是先学的C++,没有办法,学校直接安排的C++课程,学起来很吃力,建议你还是先学习C语言,先学点基础的C语言编程基础,培养自己的编程思想,然后再继续学习C++,再下来可以学习C++的扩充C#。


相关文章
|
1月前
|
存储 算法 C++
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
51 1
|
1月前
|
C++ 容器
c++ STL 之 vector 的 capacity 和 size 属性区别
c++ STL 之 vector 的 capacity 和 size 属性区别
33 0
|
1月前
|
存储 Java 编译器
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
97 0
|
1月前
|
编译器 C++ Python
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
32 1
|
3月前
|
Java 编译器 C++
Java开发和C++开发有什么区别
Java开发和C++开发有什么区别
|
30天前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
62 2
|
1月前
|
算法 编译器 C++
【C++ 概念区分】C++ 中覆盖,重写,隐藏 三者的区别
【C++ 概念区分】C++ 中覆盖,重写,隐藏 三者的区别
19 0
|
1月前
|
编译器 测试技术 调度
C++ 中 template<class T>和template<typename T>的区别
C++ 中 template<class T>和template<typename T>的区别
11 0
|
1月前
|
编解码 Unix Linux
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
47 1
|
1月前
|
安全 Unix Linux
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
15 0