零基础学C++(第3版).html.pdf

上传人:紫*** 文档编号:2916160 上传时间:2020-05-22 格式:PDF 页数:405 大小:10.03MB
返回 下载 相关 举报
零基础学C++(第3版).html.pdf_第1页
第1页 / 共405页
亲,该文档总共405页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《零基础学C++(第3版).html.pdf》由会员分享,可在线阅读,更多相关《零基础学C++(第3版).html.pdf(405页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、前言 欢迎进入C+语言的世界!虽然说C+语言是在C语言的基础上发展而来的,但不同于C语言的面向结构编程机制,C+语言引入了面向对象编程和泛型编程机制。因此,完全可以把C+语言当成一 门全新的语言来看。本书并不要求读者有C语言的基础。 为了使读者能循序渐进地掌握C+语言的语法机制和编程思想,笔者精心编写了本书。根据读者一般的学习习惯,以循序渐进的方式,从最简单的“Hello,World”程序开始,逐步深化、细化,对书 中每个知识和技术要点都给出了详细的程序示例及代码分析。这些示例代码不仅一针见血地指明了技术要点的本质,而且短小精炼,方便复制和试验。 本书特色 本书合理控制了知识点的深度和讲解的进

2、度,向读者展示出C+语言全貌。书中所给示例代码条理清晰,简洁且直透本质,读者可以迅速了解技术要点的内涵。笔者从事多年项目开发,经验丰富,本 书面向初、中级读者,以大量的示例进行示范和解说,对技术要点的阐述深入浅出,其特点主要体现在以下几个方面。 本书采用循序渐进的方式,每章主题鲜明,要点突出,适合初级、中级学者逐步掌握C+语言的语法规则和编程思想。 本书范例丰富,包含几百个代码示例,关键知识点都辅以示例帮助读者理解。范例程序简洁,不是简单的代码罗列,而是采用短小精练的代码紧扣所讲的技术细节,并配以详细的代码解释和说明, 使读者印象深刻。 本书内容全面,兼顾了C+语言所有的特性。 本书所有示例都

3、具有代表性,揭示技术要点的本质,每个示例集中说明一个概念或要点。 本书对于学习中经常遇到的问题与需要注意的关键点进行特别注释。 本书大量使用了图例、表格等直观的表达方式。 本书采用技术要点、详细介绍、示例运行等多种方式进行讲解,系统性和可用性强,能够给读者留下深刻的印象。 本书精选习题,为了给读者在学习知识之余提供更多的实践机会,每一章都配了各种类型的习题。习题紧扣本章知识点,突出对知识的理解和应用。同时,在习题中还有上机操作题,结合本章的重 点来考查,给读者应用所学知识提供机会。 本书紧扣职场,为了给有可能参加职场面试的朋友提供更多的帮助,在本书最后一章专门提供了常见面试题。精选了多年来著名

4、IT公司面试题中与C+语言相关的题目,除了提供最佳答案之外,还 对题目进行了深入浅出的分析,帮助读者了解题目特点,把握面试重点。 本书内容 本书共分为六篇,共20章。 第一篇(第12章)是C+基础,涉及程序设计语言的基本概念,Visual C+6开发环境的搭建,C+程序的构成、变量、常量、运算符与表达式、数据类型转换以及流程控制语句等内容。 第二篇(第37章)介绍面向过程的C+程序开发,分别介绍数组和字符串、指针和引用,以及结构、共用体和链表的使用,详细地讲述了函数的使用,讨论了变量的类型、生存期、作用域和可见 域,总结了在编写函数时经常出现的问题,提供了进行函数编写的建议。 第三篇(第811

5、章)介绍面向对象(OOP)的C+语言程序开发,结合精练的代码讲述了类的设计和使用、多态、虚函数、继承、代码复用、友元等内容,向读者展示了C+语言面向对象编程的全 貌和独特魅力。 第四篇(第1213章)介绍泛型编程,这是由模板来实现的,使数据结构和算法的定义可以脱离具体类型的限制。C+提供了标准模板库STL,它是该篇的重点。 第五篇(第1418章)介绍文件存储和编程规范方面的内容,文件存储从基本的高层I/O机制讲起,然后介绍C+流类库的使用、异常与错误机制、程序编码风格和C+程序编译相关的内容。 第六篇(第1920章)首先用C+语言开发了一个简单的教学管理系统,让读者学以致用。然后讲解面试题精选

6、方面的内容,介绍著名的IT公司关于C+语言程序开发方面的各种常见面试题,帮助读 者提高笔试能力,找到满意的工作。 本书读者 本书作为C+语言的基础教程,适合于: C+语言的初学者。 想从C语言跨越到C+语言的人员。 了解C+语言,但所学不全面的人员。 想了解C+语言技术及最新进展的其他人员。 高等院校理科学习C+课程的学生。 使用C+语言进行毕业设计的学生。 使用C+语言进行项目开发的人员。 掌握C+语言编程技术,想通过此找工作的人员。 本书作者 本书第110章由平顶山学院的王慧编写,第1120章由王浩编写,其他参与编写和资料整理的人员有冯华君、刘博、刘燕、叶青、张军、张立娟、张艺、彭涛、徐磊

7、、戎伟、朱毅、李佳、李玉涵、 杨利润、杨春娇、武鹏、潘中强、王丹、王宁、王西莉、石淑珍、程彩红、邵毅、郑丹丹、郑海平、顾旭光。 作者 第一篇 C+基础 第1章 C+概述 21世纪是个信息爆炸的时代,信息技术的发展日新月异,极大地改变了人们的沟通方式和生活方式。这些都是由不同的软件来完成的,这些软件称为计算机程序。有了程序,计算机才能为人类工作, 没有软件的计算机是废铁一堆。我们可以从商场里或网络上方便地得到各种软件,如用来编辑文章的字处理软件,用来合理组织数据的数据库软件,学习英语的软件,供人娱乐的游戏软件等,这些软件都 是通过计算机程序设计语言编写的。本书介绍的C+语言就是一门功能强大的程序

8、设计语言,掌握了C+语言,我们便可以根据需要编写自己的软件。 对大多数人来说,计算机已经不是什么新鲜事物,花大力气讲计算机的详细结构似乎没有必要,但为了让读者能对计算机程序开发过程有总体认识,先简要介绍计算机的组成、原理及计算机语言的一 些基本概念。 本章主要涉及以下知识点。 计算机组成:介绍计算机组成的相关知识。 程序设计语言:介绍程序设计语言的分类。 C+程序设计语言:介绍关于C+语言的基础知识。 开发环境搭建:通过图片和文字介绍如何搭建Visual C+开发环境。 实例讲解:通过一个实例程序让读者认识C+语言程序设计。 C语言与C+语言:分析两者的不同。 第一篇 C+基础 第1章 C+概

9、述 21世纪是个信息爆炸的时代,信息技术的发展日新月异,极大地改变了人们的沟通方式和生活方式。这些都是由不同的软件来完成的,这些软件称为计算机程序。有了程序,计算机才能为人类工作, 没有软件的计算机是废铁一堆。我们可以从商场里或网络上方便地得到各种软件,如用来编辑文章的字处理软件,用来合理组织数据的数据库软件,学习英语的软件,供人娱乐的游戏软件等,这些软件都 是通过计算机程序设计语言编写的。本书介绍的C+语言就是一门功能强大的程序设计语言,掌握了C+语言,我们便可以根据需要编写自己的软件。 对大多数人来说,计算机已经不是什么新鲜事物,花大力气讲计算机的详细结构似乎没有必要,但为了让读者能对计算

10、机程序开发过程有总体认识,先简要介绍计算机的组成、原理及计算机语言的一 些基本概念。 本章主要涉及以下知识点。 计算机组成:介绍计算机组成的相关知识。 程序设计语言:介绍程序设计语言的分类。 C+程序设计语言:介绍关于C+语言的基础知识。 开发环境搭建:通过图片和文字介绍如何搭建Visual C+开发环境。 实例讲解:通过一个实例程序让读者认识C+语言程序设计。 C语言与C+语言:分析两者的不同。 1.1 了解计算机 通俗地讲,计算机是个“超级工具”,是一个能执行命令的电子设备。几乎所有的计算机都遵循冯诺伊曼的“存储运行”结构,它有以下基本功能:输入、输出、存储、执行算术和逻辑运算。计 算机主

11、要由硬件和软件两大部分组成,首先看什么是硬件。 注意 硬件相当于人类的身体,而软件相当于人类的思想。 1.1.1 计算机硬件 计算机的硬件主要有中央处理器(Central Processing Unit,CPU)、内存(或称主存、随机处理器、RAMRandom Access Memory)、输入/输出设备(Input/Output Devices)和外部存储 设备(Secondary Storage,多数为具备海量存储能力的硬盘)。图1-1说明了计算机的硬件结构。 图1-1 计算机硬件结构图 (1)中央处理器 如果把计算机比喻成一个人,那么,中央处理器就相当于人的大脑,是整个计算机的控制中心。

12、中央处理器由以下几部分组成:控制单元(Central Unit,CU)、程序计数器(Program Counter,PC)、指令寄存器(Instruction Register,IR)、算术逻辑单元(Algorithm Logic Unit,ALU)和累加器(Accumulator,ACC)。这几个部分相互配合完成程序指令的执行。 控制单元主要有3个作用:获取并解释指令、控制数据或指令信息在内存中的读取、控制中央处理器内部各单元的工作。 程序计数器用来记录下一步要执行指令的位置。 指令寄存器用来暂存当前正在执行的指令。 算术逻辑单元执行所有的算术和逻辑运算。 累加器用来存储算术逻辑单元的计算结

13、果。 (2)内存 程序在执行前都要被装载到内存中,才能被中央处理器执行。以Windows系统为例,执行硬盘上的某个程序,实际上是将该程序的指令和数据导入内存,供中央处理器执行的过程。 内存是由按顺序编号的一系列存储单元组成的。在内存中,每个存储单元都有唯一的地址,通过地址可以方便地在内存单元中存取信息。内存中的数据要靠供电来维持,当计算机关机或意外断电时, 内存中的所有数据就永久地消失了。 (3)输入/输出设备 输入/输出设备是计算机与人交流的接口。负责读入指令和数据的设备称为输入设备,如键盘和鼠标;负责显示计算结果的设备是输出设备,如显示器和打印机。这里要特别说明的是外部存储器,它既 可以将

14、指令和数据送入中央处理器,又可以存储计算结果,所以,外部存储器既是输入设备,又是输出设备。 (4)外部存储器 程序的指令和数据要装入内存才能执行,但内存中的数据在断电或关机后就丢失了。为了长久保存有用的指令和数据,需要一个不依赖于供电、能“永久性”存储数据的设备,我们把它称为外部存储 器。典型的外部存储器包括硬盘、软盘、ZIP盘、光盘和磁带等。 1.1.2 计算机软件 软件是能完成特定功能的程序,大体上可以分为两类:系统软件和应用软件。 (1)系统软件 系统软件是用来控制计算机,管理计算机上的资源,使计算机的硬件有效发挥作用的程序。在系统启动时装载入内存的程序集合称为操作系统。没有操作系统的计

15、算机什么也干不了。操作系统除了进 行内存管理、文件管理和输入输出管理外,一般都提供了很多系统级的服务供用户调用。但不要认为操作系统程序有多么的高深莫测,从本质上说,它也是用程序设计语言编写出来的。只要掌握了程序设 计的原理和硬件系统的相关知识,就可以编写出自己的操作系统。除了操作系统外,设备驱动程序和其他一些管理软件也可以归入系统软件的范畴。 (2)应用软件 虽然系统软件能有效实现计算机的内部功能,协助计算机使用外围设备,但它没有把计算机转化成可以写报告、练打字、看电影等多用途的机器。想要实现这些功能,需要安装应用软件。应用软件面 向特定的应用,如用Word软件来处理文字,用Excel软件来记

16、录数据,还有供娱乐的游戏程序等。 注意 对计算机而言,所有的软件都是由程序设计语言编写的,但是应用软件要在操作系统软件的支持下才能运行。 1.2 程序设计语言 在人类的交流中,语言的作用无可取代,要想交流通畅,有共同的语言是首要条件。例如,一个中国人想和一个英国人聊天,光靠比划手势是不行的。有两种方法可以选择,要么学习英语,要么找一 个翻译。计算机程序设计同样如此,计算机是无生命、无知觉的机器,它不懂人类的语言,不管是汉语还是英语,计算机都不会接受。人类要想与计算机交流,让其完成特定的任务,就必须解决“语 言”的问题。人类和计算机交流同样有两条路:要么学习机器语言,要么找一个“翻译”。机器语言

17、是什么?“翻译”又是什么?下面将给出解答。 1.2.1 机器语言 计算机是一种电子设备,计算机处理的是数字信号。数字信号采用0和1记录信息,那么,计算机的语言机器语言(Machine Language),自然也就是0和1序列。数字0和1称为二进制数据 (Binary Digit),或者称为位(bit),这种由0和1组成的序列就称为二进制代码。 注意 二进制代码只能由0和1组成。 即便是完成相近的功能,不同的计算机的设计者也可能会采用不同的二进制代码集来表示程序指令。换句话说,不同的计算机使用的机器语言并不一定相同。不过可以肯定的是,现代计算机都是以二 进制代码的形式存储和处理数据的。 在早期的

18、开发工作中,程序都是用机器语言编写的,为了方便读者理解指令的过程,假定要执行下列操作: 1 2 ? 计算机处理这个简单的运算要经过以下步骤。 1)将1载入累加器。 2)把1暂存到内存的某个地址ADDR1中。 3)将2载入累加器。 4)将内存ADDR1中的数据和累加器中的数据相加。 5)输出结果(一般是输出到内存的某个地址,如ADDR2中)。 假定在所使用的计算机中,装载操作(将数据载入累加器)用二进制代码00000001表示,加法运算用00000010表示,存储操作(对内存某个位置赋值)用00000011表示,ADDR1为1000,ADDR2为 1001,如果用机器语言,需要编写如下的指令序列

19、。 00000001 00000001 (将1 载入累加器) 00000011 1000 (把1 暂存到内存中地址为1000 的单元) 00000001 00000010 (将2 载入累加器) 00000010 1000 (将内存地址为1000 的单元中的数据和累加器中的数据相加) 00000011 1001 (将运算结果输出到内存中地址为1001 的单元中) 可见,为了使用机器语言编写程序,程序员需要记住各种操作的二进制代码,还要记住所有数据在内存中的位置。这种编码方式难度很大,极易出错,编写程序的效率很低。 注意 现在程序员已经很少使用机器语言编写程序,而是采用下面介绍的汇编语言。 1.2

20、.2 汇编语言 汇编语言(Assembly Language)的出现简化了程序员的工作,在汇编语言中,用便于记忆的方法定义程序指令。表1-1给出了汇编语言指令与机器语言指令的对应关系。 表1-1 汇编语言指令和对应的机器语言指令 使用汇编语言计算“12?”,则上面的机器语言指令序列可以改写成如下内容。 LOAD 1 SAVE ADDR1 LOAD 2 ADD ADDR1 SAVE ADDR2 与机器语言相比,使用汇编语言编程要容易很多,但是,计算机不能直接执行由汇编语言编写的程序,必须借助“翻译”将汇编语句序列转化为计算机可以理解的二进制序列,也就是说,汇编语言指 令要转换成机器语言指令的形式

21、,才能被计算机执行。这个“翻译”的执行者就是汇编语言编译器(Assembler)。 不同的计算机可能会采用不同的二进制代码集来表示程序指令,因此,汇编语言和汇编语言编译器也和所用的计算机密切相关。 1.2.3 高级语言 既然机器语言和汇编语言都是计算机可以理解的语言,用其就可以完全控制计算机的行为,那么,为什么人们还要创造并使用高级程序设计语言呢?因为机器语言和汇编语言都是低级语言,是面向机 器的,与具体的计算机相关,学习起来困难,编程效率低,可读性、可维护性差。 例如,一个说普通话的北京人想要去欧洲旅行,可是,他不懂任何一门欧洲语言;恰好,一个说粤语的广东人也去欧洲旅行,而且他懂得德语、英语

22、、法语、西班牙语等所有欧洲语言,于是,他们结 伴同行。北京人想要同欧洲人交流,有两种方式:一是学习各种欧洲语言,然后直接同各个国家的人交流;二是让广东人当翻译,将自己的意思讲给欧洲人听,并将欧洲人的回答反馈给自己。如果您是那 个北京人,您选择哪种方式?我想答案是确定的,肯定要请广东人当翻译。虽然普通话和粤语也有一定的差异,但是比起与欧洲语言的差异,这种差异小了很多。况且,如果直接同欧洲人交流,需要学习 很多种语言。 高级语言和计算机的关系,与北京人的语言和欧洲人的关系相似。高级语言编写的程序借助于编译器就可以在特定的机器上运行,不同的欧洲人相当于不同的计算机,广东人相当于编译器,粤语相当 于计

23、算机高级语言。 高级语言的优点主要有以下两个。 高级语言编写的程序是由一系列语句(或函数)组成的,每一条语句都对应着几条、几十条甚至上百条机器指令的序列。这样的一条语句,功能显然增强了,所以用其开发程序比用低级语言效率高 得多。同时,由于高级语言的编写方式更接近人们的思维习惯,这样的程序易读,易懂,易于维护。 用高级语言编写的程序具有一定的通用性。同样的一句话,广东人根据听众的不同将其翻译成德语、英语、法语等不同形式,达到交流和沟通的目的。高级语言的一条语句,经由不同的编译器加工 编译后,生成针对特定的计算机的二进制代码。低级语言涉及计算机硬件细节,所以不具有通用性。要使高级语言编写的程序在某

24、一台计算机上运行,只要该计算机提供该语言的翻译系统即可。 思考 既然高级语言有着低级语言无法比拟的优势,是不是可以完全放弃低级语言呢? 回答是否定的。原因如下。 首先,机器语言是最终操作计算机硬件的语言,任何高级语言程序想要在计算机上执行,必须翻译成机器指令,也就是编译成二进制代码的形式。 其次,虽然高级语言在执行速度比不上同样功能的低级语言,在对硬件的操作上也不如低级语言灵活,但是在如实时控制系统这样对程序速度要求高的情况下,或者编写某种新硬件的驱动程序时,仍 然会用到低级语言(主要是汇编语言)。 同汇编语言类似,高级语言也需要专门的翻译程序(称为编译器或解释器),将其编译成机器语言后才能运

25、行。 1.2.4 数据结构和算法 计算机程序规定了计算机要执行哪些动作及这些动作应当按什么顺序来执行,如同菜谱规定了厨师做菜的材料和步骤。一个程序主要有以下两个要素。 数据结构。即数据的存储形式,程序用到的信息。 算法。操作步骤,对操作的描述,程序用什么方法解决问题。 著名的计算机科学家Nikiklaus Wirth提出了一个公式:程序数据结构算法。 1.2.5 面向过程的程序设计(POP) 在20世纪60年代计算机发展的初期,计算机和编程是少数聪明人的玩具,程序员可以根据自己的喜好随心所欲地进行程序设计。大多数程序代码组织混乱,只有程序员本人可以看懂,被称为“意大利 面条式编程”。随着计算机

26、的发展和程序规模的不断扩大,大量的问题凸显出来:程序质量低下、进度缓慢、预算严重超支,这就是“软件危机”。为此,人们提出了结构化程序设计方法,探讨了面向过 程编程的3种基本结构,即顺序、分支和循环。大大提高了程序的清晰度和可靠性,在一定程度上缓解了“软件危机”。 注意 顺序、分支和循环是现代程序设计语言的3大基本语法结构。 结构化程序设计方法建立在Bohm和Jacopini证明的结构定理的基础上。结构定理指出:任何程序逻辑都可以用顺序、选择和循环3种基本结构来表示,如图1-2所示。 图1-2 3种基本结构:顺序、分支和循环 尽管结构化程序设计技术具有这样和那样的优点,但它的局限性注定了这种程序

27、设计方法适用于规模较小的软件;当软件规模大到一定程度时,这种程序设计方法就显现出稳定性低、可修改性和可重 用性差的弊端。20世纪70年代末到80年代初,面向对象的程序设计方式的出现给人们带来了新的希望。 1.2.6 面向对象的程序设计(OOP) 面向对象的程序与结构化的程序不同,由C+编写的结构化的程序是由一个个的函数组成的,而由C+编写的面向对象的程序是由一个个的对象组成的,对象之间通过消息相互作用。 在结构化的程序设计中,我们要解决某一个问题,就是要确定这个问题能够分解为哪些函数,数据能够分解为哪些基本的类型,如int、double等。也就是说,思考方式是面向机器结构的,而不是面向 问题结

28、构的,需要在问题结构和机器结构之间建立联系。面向对象的程序设计方法的思考方式是面向问题的结构,它认为现实世界是由对象组成的。面向对象的程序设计方法解决某个问题,要确定这个问 题是由哪些对象组成的,对象间的相互关系是什么。 纯粹的面向对象程序的设计方法如下。 所有的东西都是对象。可以将对象想象成为一种新型变量,它保存着数据,而且还可以对自身数据进行操作。 程序是一大堆对象的组合。通过消息传递,各对象知道自己应该做些什么。如果需要让对象做些事情,则须向该对象“发送一条消息”。具体来说,可以将消息想象成为一个调用请求,它调用的是 从属于目标对象的一个方法。 每个对象都有自己的存储空间,可容纳其他对象

29、,或者说通过封装现有的对象,可以产生新型对象。因此,尽管对象的概念非常简单,但是经过封装以后却可以在程序中达到任意高的复杂程度。 每个对象都属于某个类。根据语法,每个对象都是某个“类”的一个“实例”。一个类的最重要的特征就是“能将什么消息发给它”,也就是类本身有哪些操作。 1.3 C+概述 C+语言是美国贝尔实验室的Bjarne Stroustrup博士和他的同事在C语言的基础上,借鉴了Simula语言面向对象的机制,于20世纪80年代初开发出来的一种过程性和对象性结合的程序设计语言。最初 称为“带类的C”,1983年,Rick Mascitti将其更名为一个有双关语的符号“C+”。 1.3.

30、1 C+语言发展历程 最初,Stroustrup使用了一个C+到C的编译器程序,将C+源代码翻译成C代码,然后通过标准的C编译器将其转化成二进制代码。随着C+的日渐普及,才出现了独立的C+编译器,直接将 C+代码编译成目标代码。这种方式突出了C+“由C语言而来,却不同于C语言”的独立特点。 C+灵活而强大的功能,很快就受到了计算机软件厂商的青睐,并不断对C+进行细化,促进了C+的发展。虽然多数公司和科研单位都希望自己的C+版本能和其他版本兼容,但如果没有一个标 准的出台,这将很难做到。为此,美国国家标准局在1990年设立了一个委员会(ANSI X3J16),专门负责C+标准的制定。ANSI/I

31、SO C+国际标准第一版于1998年正式发布,2003年又发布了C+国际 标准第二版。新的标准是对第一版的整理修订错误,减少歧义等,并没有改变语言特性。最新一版的C+被称为C+0X(也被称为C+11),其中核心语言的领域被大幅改善,包括多线程支持、泛 型编程、统一的初始化以及表现的加强。本书所有介绍和实例代码都是基于新的C+国际标准的。 C+程序具有很好的可移植性。换言之,C+程序的设计和编码不再拘泥于不同的操作系统,在Windows下编译无误的代码,在UNIX下同样可以顺利编译并运行。 1.3.2 C+语言特点 C+语言是以C语言为基础扩充、发展起来的一种优秀的通用程序设计语言,它保存了C语

32、言的紧凑、灵活、高效和移植性好的特点,又吸收了其他程序设计语言的优秀特性。从Simula中吸收了类的 机制,从Algol中吸收了运算符重载、引用和在局部的任何地方声明变量,综合了Ada的类属和异常处理机制。 C+语言是C语言的一个超集,是一门混合型的语言,既支持传统的结构化程序设计,又支持面向对象的程序设计,这是C+语言成功流行开来的一个重要原因。 读者可能会产生疑问,既然面向对象的程序设计方法比结构化的程序设计方法先进许多,为什么C+语言仍旧支持后者,而不愿意成为一门纯粹的面向对象的程序设计语言呢? 事实上,程序员们长期采用结构化的程序设计方法,积累了许多宝贵的经验,而且结构化程序设计方法在

33、小型软件项目的开发设计上仍然很适用,完全否定这种设计方法也是不恰当的。C+作为一门 混合型语言,在增加了对面向对象方法的支持的同时,还继承了传统程序设计语言C的优点,克服了其不足之处,使得自身既适用于结构化程序设计,又能满足面向对象程序设计的要求,这就符合广大程 序员逐步更新其程序设计观念和方法的要求,从而很快流行起来。 说明 在学习C+前,是否需要学习C语言呢?答案是不需要,把C+当成一门新的语言来学习。本书完全适用于没有C语言基础的读者,甚至是没有学习过编程、没有写过一行代码的读者。本书致力 于培养读者用C+的思维方式去解决问题的能力。 1.3.3 C+程序开发基本过程 下面开始我们的编程

34、之旅。开发一个C+程序,首先要建立问题的模型,根据具体问题的特点,选择过程模型或者对象模型,并将模型实现为源程序。 同其他高级语言一样,要想得到可以执行的C+程序,必须对C+源程序进行编译和链接。C+程序编译链接的过程如图1-3所示,大体有以下几个步骤。 图1-3 C+程序编译链接的过程 编辑(Edit):使用文本编辑工具编写C+程序,其文件扩展名为.cpp。这种形式的程序称为源代码(Source Code)。 编译(Compile):用编译器将源代码转换成主机使用的内部语言二进制形式的机器语言,文件扩展名为.obj。这种形式的程序称为目标代码(Objective Code)。 链接(Link

35、):将若干目标代码和现有的二进制代码库经过链接器链接,产生可执行代码(Executable Code),文件扩展名为.exe。 说明 在不同的计算机平台(如Windows,UNIX,Linux等)上,C+源文件和目标文件代码的后缀名可能会有所不同,不过都要遵循编辑、编译和链接3个步骤以生成可执行文件,本书以Windows操 作系统为示例平台。 1.4 C+开发环境的搭建 C+的流行使得许多软件厂商都提供了自己的C+集成开发环境,称为C+IDE。著名的有Borland公司的C+Builder(BCB),Microsoft公司的Visual C+(VC)等。所谓集成开发环境,即在同 一个环境下,能

36、够完成C+源程序的编写、连编、运行和调试。 说明 对初学者而言,不要被VC、BCB、BC(Borland C+)、MC(Microsoft C+)和TC(Turbo C+)等词汇所迷惑,它们都是集成开发环境,而我们要学的是一门语言。 本书以Windows操作系统下流行的C+集成开发环境Visual C+6(VC6)+sp6为示例开发环境,所有示例代码都在(Windows XP+VC6/Windows 2000+VC6)下编译通过。 1.4.1 Visual C+6开发环境简介 Visual C+6集成开发环境,被划分成4个主要区域:菜单和工具栏、工作区窗口、代码编辑窗口和输出窗口,如图1-4所

37、示。 图1-4 Visual C+6集成开发环境主界面 1.4.2 开发步骤 一般情况下,开发一个应用程序按照如下步骤来进行。 1)建立一个工程。使用Visual C+6集成开发环境进行C+程序开发,必须为程序创建一个工程(Project),并将组成程序的一个或多个文件加入到工程中。工程文件扩展名为.dsp(保存工程设 置),维护应用程序中所有的源代码文件以及Visual C+编译、链接应用程序,以便创建可执行程序。在Visual C+6的集成开发环境中,可通过“File”菜单中的“New”命令创建一个新的工程。创建 一个工程的同时,也创建了一个工作区(Workspace)。工作区文件的扩展名

38、为.dsw(保存项目工作区的设置)。如图1-5所示,一个工作区可包含多个工程,每个工程对应一个可执行程序。 图1-5 工作区与工程关系示意图 执行“File”菜单中的“New”命令后,出现如图1-6所示的对话框。单击“Projects”选项卡,左侧列出了供选择的工程类型,就本书中的示例程序而言,应当选择“Win32 Console Application”。 说明 本书讲解的是C+语言,示例代码都是通用的,与具体的系统环境关系不大,如无特别说明,本书示例代码中所有工程都是“Win32 Console Application”类型的。 在右侧“Project name”文本框中输入要建立的工程名

39、,在“Location”文本框中可手动输入或通过“”按钮选择工程文件的存放位置。选择右侧中部的“Create new workspace”单选按钮建立 一个新的工作区。因为编译完成的可执行文件运行在Windows平台上,“Platforms”中的“Win32”复选框是默认选中的,无需更改。 单击“OK”按钮进入下一步,如图1-7所示。 图1-6 使用“File”|“New”命令创建工程 图1-7 建立空工程 选择“An empty project”选项,然后单击“Finish”按钮,完成工程创建。 2)向工程中添加源代码文件。源代码文件一般由以下类型文件组成。 头文件,也称为include文件

40、。 源文件,扩展名为.cpp。 向工程中添加源文件的方法如下。 创建新的源代码文件,并将其添加到工程中去。选择“File”菜单中的“New”命令,单击“Files”选项卡,单击“C+Source File”(如图1-8所示)。选中“Add to project”复选框,在“File”文本 框中输入文件名(如main.cpp)。可以在“Location”文本框中为要创建的文件指定目录或直接采用当前目录,然后单击“OK”按钮即完成源文件的创建。按照同样的方式,选择“C/C+Header File”创建 新的头文件。 添加一个已存在的源代码文件和资源文件到工程中。选择“Project”菜单中的“Ad

41、d to project”命令,再选“Files”命令,在弹出的“Insert Files Into Project”对话框中选择要添加的文件,单 击“OK”按钮即可。 图1-8 新建源代码文件 技巧 在添加已存在的源代码文件和资源文件到工程中时,按住键或键,可同时选择多个要添加的文件。 从工程中删除一个文件。打开“FileView”文件视图,选择要删除的文件,按键即可。这仅是将文件从项目中移去,并非真正地把文件从硬盘中删除。 3)编辑源代码。在代码编辑窗口中对建立的源代码文件进行编辑,在“FileView”文件视图中双击文件名即可打开右侧的源代码编辑器,对其进行编辑。 4)项目配置。在开发应

42、用程序时,一般将项目设置为Debug模式。在该模式中,编译器将Visual C+Debug所需的调试信息一同编译。当程序调试完毕准备发行时,将项目设置为Release模式。选 择“Build”菜单中的“Set Active Configurations”命令,在弹出的“Set Active Project Configuration”对话框中进行选择即可实现Debug模式和Release模式间的相互切换。 5)编译链接。选择“Build”菜单中的“Build工程名”命令,或直接按键即可实现对整个工程所有源代码文件的编译和链接。编译链接无误即可生成一个扩展名为.exe的可执行文件。如果程序 违反

43、了语言规则,编译器将生成错误信息。指出错误所在的行,并在输出窗口中显示出来。我们可以通过单击输出窗口中的错误信息在代码编辑窗口中迅速定位出错位置。 提示 理解错误提示的意义很重要。有时,真正的问题或错误可能在标识出的错行之前,而且一个错误可能引发一连串的错误消息。因此,改正错误时,应首先改正第一个错误消息。 6)运行应用程序。从“Build”菜单中选择“Execute工程名.exe”,或者按键,或用鼠标左键单击 按钮便可运行该应用程序。 以上是用Visual C+6创建一个工程的简单过程。实际上,Visual C+6功能很强大,能做的事情还有很多。随着我们C+编程水平的提高,会对其有更深刻的认

44、识和理解,也能更好地用好这个工 具。 1.5 第一个C+程序 在屏幕上显示“Hello,World”,几乎是所有编程教科书讲述的第一个程序,那就让这个最简单的程序带我们走进C+的圣殿吧! 按照1.4节的介绍建立工程,添加源代码文件HelloWorld.cpp,如代码1-1所示。 代码1-1 第一个C+程序:HelloWorld 01 #include / 编译预处理:头文件 02 int main() / 主函数 03 04 using namespace std; /using 编译机制,引入名称空间 05 coutHello,Worldn; / 输出“Hello,World ”,n 代表换

45、行 06 return 0; / 返回 07 【代码解析】代码第5行是关键,调用输出对象cout,在屏幕上显示“Hello,World”字符串。 注意 如果读者没有使用Visual C+6,或所用的编译器较老,可能需要使用“#include”代替“#include”,同时去掉代码行“using namespace std;”。 编译链接并运行该程序,结果如图1-9所示。 图1-9 第一个C+程序:输出“Hello,World” 怎么样?看着自己编译出来的第一个C+程序,是不是很有成就感呢?关于上面程序的意义,以及C+程序的结构和语法,在以后的章节中将会有详细的介绍。本书的写作初衷,就是带领读者

46、一步一 步徜徉在博大精深的C+世界中。 1.6 C语言与C+语言的区别 C+语言是由C语言发展而来的,C语言是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出或实现过程 (事务)控制。而对于C+程序,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 1.6.1 程序设计思想的区别 C语言与C+语言的最大区别在于解决问题的思想方法不一样,即它们在程序设计思想上的区别。之所以说C+语言比C语言更先进,是因为“设计这个概念已经被融入到C+

47、语言之中”。而就语言 本身而言,在C语言中更多的是算法的概念,但是C语言是C+语言的子集。从上文可以看出,C语言实现了C+语言中过程化控制及其他相关功能,而在C+语言中的C语言,相对于原来的C语言也有所 加强,引入了重载、内联函数、异常处理等概念,C+语言更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等。 再深入一点,在C+语言中,除了考虑数据封装、类型问题以外,还需要考虑诸如对象粒度的选择、对象接口的设计和继承、组合与继承的使用等问题。所以相对于C语言,C+语言包含了更丰富 的“设计”的概念。但C语言是C+语言的一个子集,也具有强大的功能,同样值得学习。 1.6.2 语法规

48、范的区别 对于C语言和C+语言,它们在语法上的区别主要有以下几点。 1)在C+语言中,for语句中可以出现“for(int i=0;i5;i+)”,即定义i的同时使用它;但在C语言中不能这样,只能先定义,然后再使用,如“int i;for(i=0;i5;i+)”。 2)在C+语言中定义struct、union和enum类型的变量时,关键字struct、union和enum可以省略;在C语言中不能忽略。 3)在C+语言中,可以用const类型的整数作为数组的大小;在C语言中不可以。 4)在C语言中,const类型的变量是对外可见的,所以只能出现在源文件中;而在C+语言中,const类型的变量只有内部可见,所以可以出现在头文件中。例如,在C语言源文件中通过语句“const int i=2;”定义i,因为它是对外可见的,所以在其他的模块中可以通过声明“extern const int i;”来引用它;而在C+语言中,因为const类型的变量默认只有内部可见,如果想定义对外部可见的变 量,必须用extern修饰,例如用“extern const int i=2;”定义变量i,如果

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁