C++简介

C++融合了3种不同的编程方式:C语言代表的过程性语言、C++在C语言基础上添加的类代表的面向对象语言、C++模板支持的泛型编程。本章将简要介绍这些传统。不过首先,我们来看看这种传统对于学习C++来说意味着什么。使用C++的原因之一是为了利用其面向对象的特性。要利用这种特性,必须对标准C语言知识有较深入的了解,因为它提供了基本类型、运算符、控制结构和语法规则。所以,如果已经对C有所了解,便可以学习C++了,但这并不仅仅是学习更多的关键字和结构,从C过渡到C++的学习量就像从头学习C语言一样大。另外,如果先掌握了C语言,则在过渡到C++时,必须摈弃一些编程习惯。如果不了解C语言,则学习C++时需要掌握C语言的知识、OOP知识以及泛型编程知识,但无需摈弃任何编程习惯。

C++简史

在过去的几十年,计算机技术以令人惊讶的速度发展着,当前,笔记本电脑的计算速度和存储信息的能力超过了20世纪60年代的大型机。很多程序员可能还记得,将数叠穿孔卡片提交给充斥整个房间的大型计算机系统的时代,而这种系统只有100KB的内存,比当今智能手机的内存都少得多。计算机语言也得到了发展,尽管变化可能不是天翻地覆的,但也是非常重要的。体积更大、功能更强的计算机引出了更大、更复杂的程序,而这些程序在程序管理和维护方面带来了新的问题。
在20世纪70年代,C和Pascal这样的语言引领人们进入了结构化编程时代,这种机制把秩序和规程带进了迫切需要这种性质的领域中。除了提供结构化编程工具外,C还能生成简洁、快速运行的程序,并提供了处理硬件问题的能力,如管理通信端口和磁盘驱动器。这些因素使C语言成为20世纪80年代占统治地位的编程语言。同时,20世纪80年代,人们也见证了一种新编程模式的成长:面向对象编程(OOP)。SmallTalk和C++语言具备这种功能。下面更深入地介绍C和OOP。

C语言

20世纪70年代早期,贝尔实验室的Dennis Ritchie致力于开发UNIX操作系统(操作系统是能够管理计算机资源、处理计算机与用户之间交互的一组程序。例如,操作系统将系统提示符显示在屏幕上以提供终端式界面、提供管理窗口和鼠标的图形界面以及运行程序)。为完成这项工作,Ritchie需要一种语言,它必须简洁,能够生成简洁、快速的程序,并能有效地控制硬件。
传统上,程序员使用汇编语言来满足这些需求,汇编语言依赖于计算机的内部机器语言。然而,汇编语言是低级(low-level)语言,即直接操作硬件,如直接访问CPU寄存器和内存单元。因此汇编语言针对于特定的计算机处理器,要将汇编程序移植到另一种计算机上,必须使用不同的汇编语言重新编写程序。这有点像每次购买新车时,都发现设计人员改变了控制系统的位置和功能,客户不得不重新学习驾驶。
然而,UNIX是为在不同的计算机(或平台)上工作而设计的,这意味着它是一种高级语言。高级(high-level)语言致力于解决问题,而不针对特定的硬件。一种被称为编译器的特殊程序将高级语言翻译成特定计算机的内部语言。这样,就可以通过对每个平台使用不同的编译器来在不同的平台上使用同一个高级语言程序了。Ritchie希望有一种语言能将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合在一起,于是他在旧语言的基础上开发了C语言。

C语言编程原理

由于C++在C语言的基础上移植了新的编程理念,因此我们首先来看一看C所遵循的旧的理念。一般来说,计算机语言要处理两个概念——数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。C语言与当前最主流的语言一样,在最初面世时也是过程性(procedural)语言,这意味着它强调的是编程的算法方面。从概念上说,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现这些操作。程序命令计算机按一系列流程生成特定的结果,就像菜谱指定了厨师做蛋糕时应遵循的一系列步骤一样。
随着程序规模的扩大,早期的程序语言(如FORTRAN和BASIC)都会遇到组织方面的问题。例如,程序经常使用分支语句,根据某种测试的结果,执行一组或另一组指令。很多旧式程序的执行路径很混乱(被称为“意大利面条式编程”),几乎不可能通过阅读程序来理解它,修改这种程序简直是一场灾难。为了解决这种问题,计算机科学家开发了一种更有序的编程方法——结构化编程(structured programming)。C语言具有使用这种方法的特性。例如,结构化编程将分支(决定接下来应执行哪个指令)限制为一小组行为良好的结构。C语言的词汇表中就包含了这些结构(for循环、while循环、do while循环和if else语句)。
另一个新原则是自顶向下(top-down)的设计。在C语言中,其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的、易于编写的模块(整理一下书房。先整理桌子、桌面、档案柜,然后整理书架。好,先从桌子开始,然后整理每个抽屉,从中间的那个抽屉开始整理。也许我都可以管理这项任务)。C语言的设计有助于使用这种方法,它鼓励程序员开发程序单元(函数)来表示各个任务模块。如上所述,结构化编程技术反映了过程性编程的思想,根据执行的操作来构思一个程序。

C++简介 C语言编程原理相关推荐

  1. 用java有理数类包含加减乘除,7.1 面向对象的简介 - VimL 语言编程指北路

    面向对象是一种编程思想,并不特指某种编程语言.所以不必惊讶用 VimL 也能以面向 对象的方式来写代码.本章先简单介绍一下面向对象的编程思想,再探讨如何利用 VimL 现有的特性实现面向对象编程.最后 ...

  2. c语言编程题考试自动评分系统,C语言编程题考试自动评分系统简介.ppt

    C语言编程题考试自动评分系统简介 主要内容 教材简介 学习方法 机考系统简介 教材简介 教学理念的更新 教材简介 教材简介 国内55所院校使用 新版增加的内容 强化知识点.算法.编程方法与技巧 [编程 ...

  3. 量子计算机编程原理简介 和 机器学习

    量子计算机编程原理简介 和 机器学习 本文翻译自D-Wave公司网站 www.dwavesys.com/en/dev-tutorial-intro.html D-wave公司在2007年就声称实现了1 ...

  4. Spark 多语言编程的简介(X)

    Spark的框架使用Scala语言编写的,简洁而优雅: Spark的开发目前主要可以使用三种语言:Scala.Java.Python Spark 同时支持Scala.Python.Java 三种应用程 ...

  5. python语言编程:itertools.product的简介、使用方法(求笛卡尔积等)之详细攻略

    python语言编程:itertools.product的简介.使用方法(求笛卡尔积等)之详细攻略 目录 itertools的简介 itertools的使用方法 1.求笛卡尔积:根据输入的可遍历对象生 ...

  6. c语言人机互动编程,单片机人机交互系统的C语言编程简介.ppt

    单片机人机交互系统的C语言编程简介 第5章 单片机人机交互系统的C51语言编程 5.1 单片机的输入/输出端口 5.2 LED数码管显示器 5.3 LED数码管点阵显示器 5.4 液晶显示器 5.5 ...

  7. c语言编程 目录,C语言编程实例简介,目录书摘

    内容简介: <C语言编程实例>将蓝牙小车作为教学组织引领,开展各章节.模块的教学,在教学的过程中把C语言编程.VC++软件操作.单片机外围电路搭建与调试.CAD机械制图.激光切割零件制作等 ...

  8. 博途中用的是c吗_S7-1500系列博途中使用SCL语言编程方法简介

    S7-1500系列博途中使用SCL语言编程方法简介 SCL:Structured Contorl Language,结构化控制语言. 在TIA博途软件中,默认支持SCL语言,在建立程序块时可以直接选择 ...

  9. PIC单片机与PIC单片机C语言编程简介

    对于计算机学院与电子学院相关的同学来说,单片机一定不是一个陌生的概念.在大学的学习生涯中,经常用于教学的是MCS-51系列单片机.其实,除了MCS-51单片机外,还有一类单片机--PIC单片机. PI ...

最新文章

  1. 不用额外变量交换两个整数的值
  2. 在Ubuntu上以精灵进程daemon process的方式启动一个命令
  3. hashmap 从头到尾_如何从头到尾设计一个简单的复古徽标
  4. oracle中的merge into用法解析
  5. 144显示器只有60_你知道显示器60Hz和144Hz的刷新率差别有多大吗?你没有用过吗?...
  6. Spring Quartz 框架结构概述(一)[转]
  7. paip.invalid conversion from FormWdg* to SOCKET {aka unsigned int}
  8. android: unexpected end of stream
  9. 蓝牙 穿戴手环通信原理
  10. HTML做一个传统节日端午节 带设计报告4500字
  11. 安装系统时一直是程序正在启动服务器,全新安装win10卡在安装程序正在启动该怎么办?...
  12. 使用Python套接字编程的视频聊天应用
  13. 单词拆分(动态规划)
  14. yunfile php,yunfile下载器
  15. c++实现文件传输之三:断点续传与多线程传输转
  16. final 变量可以修改
  17. Go语言学习、结构体
  18. java实验报告可下载_JAVA实验报告.doc
  19. 请教下uniapp 打包分享提示签名不对 检查与微信开放平台签名是否一致 这个怎么解决
  20. CSS3 旋转的八卦图

热门文章

  1. 谈谈堆排序,大顶堆,小顶堆
  2. 小知识系列(3):Hanoi塔(汉诺塔,河内塔)
  3. Flutter高仿微信-第51篇-群聊-修改群名
  4. AVPro Video官网下载
  5. 告别 PS !3 行代码 5 秒搞定抠图的 AI 神器!
  6. 处理 unity崩溃日志
  7. 【Java启程】语句结构
  8. 东财《自我认知与职业生涯规划》单元作业一二三
  9. 2401C可解RFX2401C缺货的燃眉之急,也可直接诶替代CC2592/CC2591
  10. cad中填充的剖面线不能被修剪_为什么CAD中填充无法修剪?