C++语言的起源以及优缺点(相对于C和java)

先介绍一下c++之父

Bjarne Stroustrup 1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑桥大学,AT&T大规模程序设计研究部门负责人,AT&T贝尔实验室和ACM成员。1979年,Stroustrup开始开发一种语言,当时称为“C with Class”,后来演化为C++。1998年,ANSI/ISO C++标准建立,同年,Stroustrup推出其经典著作The C++ Programming Language的第三版

C++语言发展大概可以分为三个阶段:

  1. 第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;
  2. 第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;
  3. 第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。


以下是C++发展年代列表:

  1. 1967 年,Simula 语言中第一次出现了面向对象 (OO) 的概念,但由于当时软件规模还不大,技术也还不太成熟,面向对象的优势并未发挥出来。
  2. 1980 年,Smalltalk-80 出现后,面向对象技术才开始发挥魅力。
  3. 1979 年,Bjarne Stroustrup 借鉴 Simula 中 "Class" 的概念,开始研究增强 C 语言,使其支持面向对象的特性。 B.Stroustrup 写了一个转换程序 "Cfront" 把 C++ 代码转换为普通的 C 代码,使它在各种各样的平台上立即投入使用。 1983 年,这种语言被命名为 C++
  4. 1986 年,B.Stroustrup 出版了 《The C++ Programming Language》第一版,这时 C++ 已经开始受到关注, B.Stroustrup 被称为 C++之父(Creator of C++)。
  5. 1989 年,负责 C++ 标准化的 ANSI X3J16挂牌成立。1990 年,B.Stroustrup 出版了 《The Annotated C++ Reference Manual》(简称 ARM),由于当时还没有 C++ 标准,ARM 成了事实上的标准。
  6. 1990 年, Template(模板) 和 Exception(异常) 加入到了 C++ 中, 使 C++ 具备了泛型编程(Generic Programming)和更好的运行期错误处理方式。
  7. 1991 年,负责 C++ 语言国际标准化的技术委员会工作组 ISO/IEC JTC1/SC22/WG21 召开了第一次会议,开始进行 C++ 国际标准化的工作。从此,ANSI 和 ISO 的标准化工作保持同步,互相协调。
  8. 1993 年,RTTI(运行期类型识别) 和 Namespace(名字空间) 加入到 C++ 中。1994 年, C++ 标准草案出台。 B.Stroustrup 出版了《The Design and Evolution of C++》(简称 D&E)。
    本来,C++ 标准已接近完工,这时 STL(标准模板库) 的建议草案被提交到标准委员会,对 STL 标准化的讨论又一次推迟了 C++ 标准的出台。
  9. 1998 年,ANSI 和 ISO 终于先后批准 C++ 语言成为美国国家标准和国际标准。
  10. 2000 年,B.Stroustrup 推出了 《The C++ Programming Language》特别版(Special Edition),书中内容根据 C++ 标准进行了更新。


语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,而 C 语言是从 B 语言发展过来的,B 语言是 BCPL 的一个解释性后代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由来,由于当时这个语言是剑桥大学和伦敦大学合作开发的,在伦敦的人员加入之前,C 表示剑桥,伦敦人员加入之后,C 表示 Combined 组合。还有一种非正式的说法,C 表示 Christopher,因为 Christopher 是 CPL 背后的主要动力。

最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。

当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。

C++语言既保留了C语言的有效性、灵活性、便于移植等全部精华和特点,又添加了面向对象编程的支持,具有强大的编程功能,可方便地构造出模拟现实问题的实体和操作;编写出的程序具有结构清晰、易于扩充等优良特性,适合于各种应用软件、系统软件的程序设计。用C++编写的程序可读性好,生成的代码质量高,运行效率仅比汇编语言慢10%~20%。下面来给大家总结一下c++和c还有Java的特点.。

C++语言具有以下特点:

  1. C++是C语言的超集。它既保持了C语言的简洁、高效和接近汇编语言等特点,又克服了C语言的缺点,其编译系统能检查更多的语法错误,因此,C++比C语言更安全。
  2. C++保持了与C语言的兼容。绝大多数C语言程序可以不经修改直接在C++环境中运行,用C语言编写的众多库函数可以用于C++程序中。
  3. 支持面向对象程序设计的特征。C++既支持面向过程的程序设计,又支持面向对象的程序设计。
  4. C++程序在可重用性、可扩充性、可维护性和可靠性等方面都较C语言得到了提高,使其更适合开发大中型的系统软件和应用程序。
  5. C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。
  6. C++设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。
  7. C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。
  8. C++设计成尽可能与C兼容,籍此提供一个从C到C++的平滑过渡。
  9. C++避免平台限定或没有普遍用途的特性。
  10. C++不使用会带来额外开销的特性。
  11. C++设计成无需复杂的程序设计环境。
  12. C语言的优点
  13. 1.简洁紧凑、灵活方便
  14. 2.运算符丰富

    3.数据结构丰富

    4. C是结构式语言

    5. C语法限制不太严格,程序设计自由度大

    6. C语言允许直接访问物理地址,可以直接 对硬件进行操作

    7. C语言程序生成代码质量高,程序执行效 率高

    8. C语言适用范围大,可移植性好

    9. C语言有一个突出的优点就是适合于多种 操作系统,如DOS、UNIX,也适用于多种机型

    10.有效地将一个较复杂的程序系统设计任 务分解成许多易于控制和处理的子任务,便 于开发和维护

    C语言的缺点:

    1. C语言的缺点主要是表现在数据的封装性 上,这一点使得C在数据的安全性上做的有 很大缺陷,这也是C和C++的一大区别。

    2. C语言的语法限制不太严格,对变量的类 型约束不严格,影响程序的安全性,对数组 下标越界不作检查等。从应用的角度,C语 言比其他高级语言较难掌握。

    3.可重用性差

    4.数据安全性差

    5.难以开发大型软件和图形界面的应用软件

    6.把数据和处理数据的过程分离为相互独立 的实体

    7.当数据结构改变时,所有相关的处理过程 都要进行相应的修改

    8.每一种相对于老问题的新方法都要带来额 外的开销

    9.图形用户界面的应用程序,很难用过程来 描述和实现,开发和维护也都很困难

    C++

    C++优点:

    1.可扩展性强

    2.高效 简洁 快速

    3.可移植性

    4.面向对象的特性

    5.强大而灵活的表达能力和不输于C的效率

    6.支持硬件开发

    7.程序模块间的关系更为简单,程序模块的 独立性、数据的安全性就有了良好的保障

    8.通过继承与多态性,可以大大提高程序的 可重用性,使得软件的开发和维护都更为方便

    C++缺点:

    1.比较底层,易用性不是很好

    2.多重继承和友元机制

    3.标准库涵盖范围不足

    4.开发周期长

    5.非并行

    6.掌握有难度

    7.粒度封装不够

    Java的优点:

    1.简单性

    2.面向对象性(面向对象的程度可以达到 95%)

    3.健壮性

    4.跨平台性

    5.高性能(自动垃圾回收机制)

    6.多线程

    7.动态性

    8.安全性

    Java的缺点:

    1.效率低(毋庸置疑)

    2.跨平台是它最大的优点也是最大的缺点

    3.复杂性(做一个项目需要很多的知识,涉 及面广)

猜你喜欢

转载自blog.csdn.net/Dachao0707/article/details/81487538