资源描述
第一章初始C+C+简介C+,这个词在中因大陆的程序员圈子中通常故读做C加加,而西方的程序员通市法做C plus plus,它的前身臭C语言。1969年,美国贝尔实验宴的肯桑普彖用汇编语言编写了第一个UNIX操作系统,接札 他又,艮据剑林大学的马丁,理查德设计的BCPL语iBasic CombinedProgramming language,基本的蛆合编程语言)为UNIX设计了一种便于编写条统软件的语言,命名为B。19721973年间,同在贝东典验,宴的丹尼斯里多改造了B语t,为其添加了数据类型的机念,并将其命名为C。1973年,肯扬普表小蛆在PDP-11 机上用 C 重新改写了 UNIX 的内核。与此同时,C语言的编译程序也故移植到IBM360/370,Honeywell 11以及VAX-11/780等多种计算加上,迅速自为应用最广泛的条统程序设计语言。然而,C语言也存在一些缺陷,例如类型松音机制相对较弱、缺少支持代码重用的语i 结构等,造成用C语言开发大程序比较困难。为了克服C语言存在的缺点,贝尔叫验宴的比扬尼,斯宰司朱夫(BjameStroustnjpJ博士及其同事开始对C语言进行改进和力充,将 类 的机念引入了C语言,构成了最早的C+语t(1983;o 后来,斯卓司朱夫彳。他的同事们又为C+引进了运算符重我、引冰去函数等用多特性,并使之更加精炼,于伯89后推出了 AT&T C+2.0板。随后美国国泰标准化私会ANSI(Ame ican National Standard Institute。国际标准化蛆织ISO(lnternational Standards Oi垩nization)一起进行了 标准化工作,并于 1998年正式发布了C+语言的国际标准ISO/IEC98-14882。各软件商推出的C+编译器却支楼核林维,并有不同程度的拓展。C+支梅面向对象的程序设计方法,特别适合于中型和型的软件开发项目,从开发时间、费用到软件的重用性、可必充性、可维护性和可靠性等方面,C+为具有很大的优越性。同时,C+又是C语i 的一个超集,这就使得伟多C代码不经修改就可被C+的牛通过。C +白 勺 发:展 过 程C +T珏右衣长攵 机 力A X分为三个呛收:第一呛疫人8 0年代到1 995年。迁一除SLC+T珏 言 区 本 上 是传咏类型上的西向象珏言,拜JL免 借 希 才 走 近C珏 考 的 效-率 .在工业羽住用的开龙语言中占据了相当九玲额;第二 呛 聿 殳 人1 995年到2 000年,运 一 呛 才 会 由 手 打 举 铁 板律(S TL)不。后来的B oost等 程 序 库 妁 士 见,泛 _ 犁 程 序1史 计 用L C +中 占 为 了 毡 氽 越 多 妁 上 匕 重 性 当然,同 时d j -T J a v a.C#等语言妁由现开o 硬.仔价招 的*现状下阵,C +免 到 了 一定的冲击;第 三 阶 奴 入2 000年 至冬,由于以Loki、MPL*程 片 一 伴 为 代 表 的 产 生 大,为 程禾-模板无筛程的出现,C +出 现,了发&历史上攵一个新妁高峥,近些祈壮术妁由观 XX瓜 禾 库 有 才 攵 术 妁M*.合.住C +已经成为当今生流程省 4史讨语言中乘复_ 布妁 一 员C+与C有 什 么 不 同?很多初学者认为C+仅仅是C语言的扩充和补充,如果这么想,那就大错特错了。C+与C语言最大的不同是在解决问题时思维方式的不同,C+采用面向对象思维,而C语言则采取面向结构思维。面向结构思维的宗旨就是将一个大程序拆分成一个个很小的结构,这里有必要说明一下结构。结构是什么呢?结构就是实现一个或多个功能的代码块,比如说计算“1 +1=?”,假如算出等于2,那么就是实现了一个功能,而这个实现“1 +1=2”的代码块就可看做是一个结构,或者叫做方法。面向结构思维就是要将一个大程序化分成若干个很小的结构,每个结构都完成了一个或多个功能,所有结构集合起来就可以完成一个大功能。这样的编程思想在80年代前期还是可以的,但是到了80年代后期,它的弊端就暴露出来了 o首先是程序i勺可维护性方面,由于结构化编程仅仅是将大程序细化成若干个小结构,而并没有考虑数据的安全性问题,比如说数据还是属于整个程序的,这样就导致某个地方对数据的修改,会对整个程序造成难以预料的影响。举个例子,某个游戏将怪物的生命值设定为1 0 0,而这种怪物在游戏中的数量为30个,由于生命值是属于整个程序的,而不是某个具体的怪物的,所以主角每砍怪物一下,30个怪物的生命都会下降10点,而主角杀死一个怪物以后,30个怪物都会死亡,这显然是不合理的。其次是程序的可重用性,由于结构化编程并没有将相关的数据和结构看做一个整体,所以无法利用已有的代码来创造新的代码。打个比方,某游戏公司用结构化的方式创造了一个怪物,这个怪物是由若干个结构和若干个数据组成的,游戏公司希望在它的基础上再创造一个新的怪物,这个新的怪物仅仅是比旧的怪物多了一个功能跳跃,看上去要实现这个怪物似乎很简单,但是由于结构化编程并没有将怪物看做是一个整体,所以他们需要重新编写这个新怪物。随着软件工程的发展,软件越来越大,数据越来越多,面向结构所带来的问题也越来越多,越来越严重,曾一度导致“软件危机”,面向对象就是为了解决“软件危机”而创造的,面向对象思想增加了大量的编程理念,它有能力将一个大程序拆分成若干个对象,每个对象中再封装部分数据和实现功能的方法,一个对象想要访问另一个对象的数据,必须争得该对象的同意,而该对象中数据的改变也不会影响到其他对象,从而解决了数据的安全性问题;另一方面,面向对象允许将具有相同特征的对象划分为一类,而同一类的对象又可以继续向下派生,父生子,子生孙,代码不经修改即可重复利用,从而实现了代码的重用。拿游戏做个比方,游戏中的30个怪物可以看做是30个对象,每个对象都拥有一个生命值,这样即使其中一个怪物的生命发生变化,也不会影响到其他的怪物。同时由于对象是一个整体,所以我们要创造一个新怪物时,只需要在原来的怪物身上增加新功能即可,而不用重写该代码。面向对象的另一个优点是支持多态性,多态性是什么呢?多态性是指不同的对象采取相同的方法会导致不同的行为或结果。比如说我们要模拟一个足球游戏,不同的足球运动员代表不同的对象,而相同的方法则指的是射门这同一动作,由于运动员技术水平不同,所以技术好的运动员进球的概率要高些,而技术差的运动员则踢飞的概率要高些。学 习C+之 前 需 要 先 学C吗?前 面 我 们 巳 经 说 过 了C+是 为 了 解 决C培 言 带 来 的 同 题 而 创 造 的,同 时 又 说明 了C与C+的 区 别,C语 言 由 于 自 身 能 力 的 不 足,只 能 将 任 务 细 分 成 一 个 个 的 小任 务,这 样 它 在 处 理 小 程 序 时 是 很 灵 活 而 且 效 率 很 高 的.但 是 当 程 序 比 较 且 杂,规 模 比 较 大 时,C语 言 就 越 发 凸 显 出 它 的 不 足,它 很 难 或 者 根 本 无 法 胜 任 这 样 的 工作.C+增 加 了 大 量 的 编 程 理 念,它 有 能 力 将 整 个 工 程 划 分 成 一 个 个 较 大 的 对象.每 个 对 象 中 又 包 含 若 干 个 小 任 务 和 数 据,对 象 与 对 象 相 互 作 用 或 协 调 促 成 了,个 大 工 程。我 行 善 到 由 于C的 不 足,它 只 能 站 在 细 枝 末 叶 的 角 度 来 考 虑 问 题,所 以 当 程序 趋 向 于 大 的 今 天,它 越 来 越 不 能 胜 任 工 作,而C+功 能 非 常 强 大,它 可 以 站 在大 局 上 现 京 和 剖 析 问 题,这 样 它 就 可 以 解 决 一 些 相 对 比 较 复 杂 的 任 务,这 是 由 能力 而 决 定 的 思 维 方 式 不I司,为 了 避 免 两 种 思 维 方 式 引 起 的 混 百L,我 建 议 你 不 要 先学C再 学C+,否 则 你 将 会 为 忘 记C语 言 的 结 构 化 思 维 方 式 而 感 到 万 分 苦 恼。不 过 假 如 你 已 经 学 习 了C语 音,那 么 也 不 用 感 到 沮 丧,C是C+的 基 础,C+语 言 和C语 育 在 很 多 方 面 是 赖 容 的。因 此,掌 握 了C语 言,你 只 需 要 转 换 一 下思 维 方 式,那 么 再 进 一 步 学 习C+也 能 很 快 上 手。C+与 其 他 语 言 的 区 别当你精通了C+以后,你会发现其他的编程语言都是相通的,不同的仅仅是外在表现形式,比如说pascal语言,它定义变量的次序与C+相反,C+是先类型后变量名,而pascal则是先变量名后类型。而Java和C#则在安全性和易学性等方面下功夫,将C+一些高级特性去掉,而换以另一种表达方式来阐述它的其他特性。因此,学会了C+,那么你将掌握其他语言的90%,另外的10%仅仅是在描述同一概念时所采取的方式不同而巳。C+的版本以及安装问题基于本书所有例程都是在Microsoft Visual C+6.0环境下测试成功,因此希望读者安装此版本的C+编译器。(当然不是此版本的也没问题)另外,请一定要安装英文原版,否则有时在你花费大量时间调试后,发现不是你的错误,而是编译器的错误的时候,那就晚了。(大部分中文版本的C+编译器会偶尔出现不能编译的错误,这是汉化所致。)注意:由于Microsoft Visual C+6.0对模板的支持不太好,本书第二十三章的内容建议使用Microsoft Visual Studio 2003或Microsoft Visual Studio2005来编译。fS第二章从一个最简短的C+程序讲起第一节:简单的屏幕输出小程序ttinclude iostream在程序的第一行,有个字符#,这是个预处理标志,用来对文本进行预处理操作,在这里要说一下预处理标志,预处理标志表示该行代码要最先进行处理,所以,它要在编译器编译代码之前运行。#后 面 的 include是个预处理指令,它后面跟了一对尖括号,表示将尖括号里的文件在这里读入。文件iostream(输入输出流)是个标准库,它包含了众多的成员函数,库中的每个函数都有自身的作用,比如本课中的cout对象,它就是标准函数库中的一部分。ttinclude in t main()|在程序的第二行声明了一个main函数,main函数的意思是“主函数”,每个C+程序都有一个 main函数,函数是实现一个或多个功能的代码块。在这里main函数实现了输出功能。每个函数都需要标明其返回值类型,因此在本程序中main函数的返回值被标明为in t,也就是说在函数结束后要向操作系统返回一个整数。要注意的是,m ain函数与普通函数还是有着本质的区别,比如说:一般函数都是由其它函数调用或者激活,但 是 main函数却是在程序开始时便自动执行。include in t main。std:心0 a“我喜欢0+眦”;return 0;找喜欢C+Press any key to continue改程序使用了标准函数中的cout对 象 来 输 入 行信息。要注意cout的用法:它后面要跟 个左移运算符【】,【】后面的所有内容都会被输出在屏幕上,如果要输出字符的话,务必用双引号引起来,这里输出了一段字符“我喜欢C+”,在该段语句的结尾处,也就是字符串“我 喜 欢 C+”的后面使用了一个格式符号【5】,该格式符的作用是换行并将光标定位到第二行的开头。在这里需要说明一下:在标准函数库中还有一个cin对象,它用来接收键盘输入,它是使用方法与cout相反,cin后面加右移运算符【】。Itinclude iostreamin t main()std:我喜欢;in t x;std:cinx;std:coutx;return 0;我喜欢C1tPress any key to continue第二节:输出语句的使用include
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索