什么是C++

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

一、起源
世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D.Ritchie和K.Thompson共同发明了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,它实际上是UNIX的“副产品”。它充分结合了汇编语言和高级语言的优点,高效而灵活,又容易移植。
1971年,瑞士联邦技术学院N.Wirth教授发明了Pascal语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。
20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。

发展时间线如下:
  1983年8月, 第一个C++实现投入使用(所以我喜欢说1983年C++开了天界)
1983年12月,Rick Mascitti建议命名为CPlusPlus,即C++。
1985年2月, 第一个C++ Release E发布。
   10月, CFront的第一个商业发布,CFront Release 1.0。
   10月, Bjarne博士完成了经典巨著The C++ Programming Language第一版
1986年11月 C++第一个商业移植CFront 1.1,Glockenspiel。
1987年2月, CFront Release 1.2发布。
   11月,第一个USENIX C++会议在新墨西哥州举行。
  1988年10月 第一次USENIX C++实现者工作会议在科罗拉多州举行。
1989年12月,ANSI X3J16在华盛顿组织会议。
1990年3月, 第一次ANSI X3J16技术会议在新泽西州召开.
      5月, C++的又一个传世经典ARM诞生。
      7月, 模板被加入。
      11月,异常被加入。
  1991年6月, The C++ Programming Language第二版完成。
      6月, 第一次ISO WG21会议在瑞典召开。
     10月, CFront Release 3.0发布。
1993年3月, 运行时类型识别在俄勒冈州被加入。
      7月, 名字空间在德国慕尼黑被加入。
  1994年8月, ANSI/ISO委员会草案登记。
  1997年7月, The C++ Programming Language第三版完成。
     10月, ISO标准通过表决被接受
  1998年11月,ISO标准被批准。

二、C++与C的对比
c语言是面向过程的程序设计:数据结构+算法,c语言的目的是高效。
c++是面向对象的程序设计:由现实世界建立软件模型。

C语言的特点
1.作为一种面向过程的结构化语言,易于调试和维护;

2.表现能力和处理能力极强,可以直接访问内存的物理地址;

3.C语言实现了对硬件的编程操作,也适合于应用软件的开发;

4.C语言还具有效率高,可移植性强等特点。

C++的特点

1.在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言;

2.可以使用抽象数据类型进行基于对象的编程;

3.可以使用多继承、多态进行面向对象的编程;

4.可以担负起以模版为特征的泛型化编程。

C++比C加强的点:

1、引入命名空间
一个中大型软件往往由多名程序员共同开发,会使用到大量变量和函数,不可避免的会出现变量或函数命名冲突的问题。为了解决合作开发时的命名冲突问题,C++引入了命名空间(namespace)的概念。

  1. 命名空间将全局作用域分成不同的部分
  2. 不同的命名空间的标识符可以同名而不会发生冲突
  3. 命名空间可以相互嵌套
  4. 全局作用域也叫默认命名空间

2、实用性加强
C语言中的变量都必须在作用域开始的位置定义
C++中更加强调语言的“实用性”,所有的变量都可以在需要使用时再定义。

3、变量监测加强
在C语言中重复定义多个全局变量是合法的,这些同名的全局变量最终都会被链接到全局数据区的同一个地址空间上
在C语言中只有一个全局作用域C语言中所有的全局标识符共享同一个作用域,标识符之间可能发生冲突

在C++中不允许定义多个同名的全局变量

4、struct类型加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。
C++中的struct是一个新类型的定义声明。
C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型,所以在定义变量的时候需要在前面加上 struct 关键字进行修饰。
C++中 struct 定义了一种新的数据类型,可以直接用来定义变量

5、新增bool类型关键字
C++在C语言的基本类型系统之上增加了bool
C++中的bool可取的值只有true和false
理论上bool只占用一个字节,
如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现

true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示

bool类型只有true(非0)和false(0)两个值
C++编译器会在赋值时将非0值转换为true,0值转换为false

6、三目运算符的加强
1)1)C语言返回变量的值 C++语言是返回变量本身
C语言中的三目运算符返回的是变量值,不能作为左值使用
C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方

2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
(a < b ? 1 : b )= 30;

3)C语言如何支持类似C++的特性呢?
当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已

7、函数重载
在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。

1、参数个数不同
在这里插入图片描述
2、参数格式不同
在这里插入图片描述
三、在实际领域的应用
C语言的主要应用领域是:系统底层, 驱动, 嵌入式开发。
C++的主要应用领域是:应用于游戏开发, 大规模, 高性能, 分布式要求的程序开发。
不能说哪个语言更好,每种语言都各有所长,只是适用的领域不同。

四、争议
“在这12年里,C++用户人数大约每七个月半增加一倍”是许多C++相关文件必引的一段话;然而,时至今日新语言层出不穷,用户人数已不太可能以如此速度增长。分析机构EvansData定期对开发人员展开调查,其数据显示,以C++为工具的开发人员在整个开发界所占的比例由1998年春天的76%下降至2004年秋的46%。

一部分Unix/C程序员对C++语言深恶痛绝,他们批评的理由如下:
STL以非常丑陋的方式封装了各种数据结构和算法,写出来的代码难以理解、不美观。
C++编译器复杂和不可靠,不适合构建人命关天类型的程序。
Ian Joyner认为面向对象技术徒增学习成本,不如面向过程的C语言简单容易使用,尤其是在系统软件的构建上。概括说来UNIX程序员批评C++主要是由于UNIX社区与C++社区的文化差异。
一个值得注意的事情是Linux之父Linus Torvalds曾经炮轰C++;图灵奖得主尼克劳斯·维尔特也曾经批评C++语言太复杂、语法语义模糊,是“拙劣工程学”的成果。
事实上,对于C++语言的批评并不只来源于Unix/Unix-Like系统下的程序员。就像C++语言本身是一个跨平台的语言一样,对C++的批评并不局限于Unix/Unix-Like系统用户。
一个确定的观点是:C++是一门复杂的语言、这门语言拥有过多的特性从而难以彻底掌握;C++的某些库难以学习、掌握并应用于实际当中;很多程序员都认为C++是一个过度设计的程序语言。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值