零基础学C++
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 在结构化的程序设计中,我们要解决某一个问题,就是要 确定这个问题能够分解为哪些函数,数据能够分解为哪些 基本的类型,如int、double等。也就是说,思考方式是面 向机器结构的,不是面向问题的结构,需要在问题结构和 机器结构之间建立联系。面向对象的程序设计方法的思考 方式是面向问题的结构,它认为现实世界是由对象组成 的。面向对象的程序设计方法解决某个问题,要确定这个 问题是由哪些对象组成的,对象间的相互关系是什么。
• 结构化程序设计方法建立在Bohm、Jacopini证明的结构定理的基础上,结构定理指 出:任何程序逻辑都可以用顺序、选择和循环等3种基本结构来表示,如所示。
1.2.6 面向对象的程序设计(OOP)
• 面向对象的程序与结构化的程序不同,由C++编写的结构化 的程序是由一个个的函数组成的,而由C++编写的面向对象 的程序是由一个个的对象组成的,对象之间通过消息而相 互作用。
• 数据结构:即数据的存储形式,程序用到的信 息。
• 算法:操作步骤,对操作的描述,程序用什么方 法解决问题。
• 著名的计算机科学家Nikiklaus Wirth提出了一个 公式:
• 程序 = 数据结构 + 算法。
1.2.5 面向过程的程序设计(POP)
• 在60年代计算机发展的初期,计算机和编程是少数聪明人的玩具,程序员可以根据自 己的喜好随心所欲地进行程序设计,大多数程序代码组织混乱,可以说只有作者本人 可以看懂,被称为“意大利面条式编程”,随着计算机的发展和程序规模的不断扩 大,一大堆的问题凸现出来:程序质量低下,进度延误,预算严重超支,这就是“软 件危机”。为此,人们提出了结构化程序设计方法,探讨了面向过程编程的3种基本 结构,即顺序、分支和循环,大大提高了程序的清晰度和可靠性,在一定程度上缓解 了“软件危机”。
• 高级语言和计算机的关系,与北京人的语言和欧洲人的关系相似。高 级语言编写的程序借助于编译器就可以在特定的机器上运行,不同的 欧洲人相当于不同的计算机,广东人相当于编译器,粤语相当于计算 机高级语言。
1.2.4 数据结构和算法
• 计算机程序规定了计算机要执行哪些动作及这些 动作应当按什么顺序来执行,如同菜谱规定了厨 师做菜的材料和步骤。一个程序主要有以下两个 要素:
• 编辑(Edit):使用文本编辑工具编写C++程序,其文件后 缀为.cpp,这种形式的程序称为源代码(Source Code)。
• 编译(Compile):用编译器将源代码转换成主机使用的内 部语言――二进制形式的机器语言,文件后缀为.obj,这 种形式的程序称为目标代码(Objective Code)。
第1章 C++概述
• 21世纪是个信息爆炸的时代,计算机、信息技术的发展日新月 异,极大地改变着我们的沟通方式和生活方式。“足不出户天下 知”已成现实,网上冲浪和网络聊天早已不是什么新名词,网上 炒股、网上办公、网络会议,也因其方便快捷,得到了广泛的应 用。撇开网络不谈,计算机在其他方面也成为人类不可缺少的工 具与伙伴,有了计算机,学生可以事半功倍地完成课程的学习, 仓库管理员能更高效地完成工作,家庭主妇能保证收支的平衡, 更好地管理财务,这样的例子数不胜数。
• 对 初 学 者 而 言 , 不 要 被 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.3.3 C++程序开发基本过程
• 下面开始我们的编程之旅,开发一个C++程序,首先要建立 问题的模型,根据具体问题的特点,选择过程模型或者对 象模型,并将模型实现为源程序。
• 同其它高级语言一样,要想得到可以执行的C++程序,必须 对C++源程序进行编译和链接,该过程如所示,大体有以下 几个步骤:
来自百度文库
1.3.1 C++语言发展历程
• 最初,Stroustrup使用了一个C++到C的编译器程序,将C++源代码 翻译成C代码,然后通过标准的C编译器将其转化成二进制代码, 随着C++的日渐普及,才出现了独立的C++编译器,直接将C++代码 编译成目标代码,这种方式,突出了C++“由C语言而来,却不同 于C语言”的独立地位。
• 即便是完成相近的功能,不同的计算机的设计者 也可能会采用不同的二进制代码集来表示程序指 令,换句话说,不同的计算机使用的机器语言并 不一定相同,不过可以肯定的是,现代计算机都 是以二进制代码的形式存储和处理数据的。
1.2.2 汇编语言
• 汇编语言(Assembly Language)的出现简化了程 序员的工作,在汇编语言中,用便于记忆的方法 定义程序指令,表1给出了汇编语言指令机器语言 指令的对应关系。
• C++灵活而强大的功能,很快就受到了计算机软件厂商的青睐,并 不断对C++进行细化,促进了C++的发展。虽然多数公司和科研单 位都希望自己的C++版本能和其他版本兼容,但如果没有一个标准 的出台,这将很难做到。为此,美国国家标准局在1990年设立了 一个委员会(ANSI X3J16),专门负责C++标准的制定。ANSI/ISO C++国际标准第一版于1998年正式发布,2003年又发布了C++国际 标准第二版,新的标准是对第一版的整理――修订错误,减少歧 义等,并没有改变语言特性,本书所有介绍和实例代码都是基于 新的C++国际标准的。当然,C++还在不断地发展中,下一版的C++ 标准制定工作已经开始,该版本被称为C++ 0X,预期完工时间为 2009年前后。
1.1 了解计算机
• 通俗地讲,计算机是个“超级工具”,是个能执 行命令的电子设备。几乎所有的计算机都遵循 冯·诺伊曼的“存储――运行”结构,有以下基 本功能:输入、输出、存储、执行算术和逻辑运 算。计算机主要由硬件和软件两大部分组成,首 先看一下什么是硬件。
1.1.1 计算机硬件
• 计算机的硬件主要有中央处理器(CPU, Central Processing Unit)、内存(或称主存、随机处理器、 RAM――Random Access Memory)、输入/输出设备 (Input/Output Devices)和外部存储设备(Secondary Storage,多数为具备海量存储能力的硬盘),说明了计算 机的硬件结构。
1.3.2 C++语言特点
• C++语言是以C语言为基础扩充、发展起来的一种优秀的通 用程序设计语言,它保存了C语言的紧凑、灵活、高效和移 植性好的特点,又吸收了其他程序设计语言的优秀特性, 从simula中吸收了类的机制,从Algol中吸收了运算符重 载、引用和在局部的任何地方声明变量,综合了Ada的类属 和异常处理机制。
1.2.3 高级语言
• 既然机器语言和汇编语言都是计算机可以理解的语言,用其可以完全 控制计算机的行为,那么为什么人们还要创造并使用高级程序设计语 言呢?因为机器语言和汇编语言都是低级语言,是面向机器的,与具 体的计算机相关。学习起来困难,编程效率也低,可读性、可维护性 也差。
• 还是举个例子,一个说普通话的北京人想要去欧洲旅行,可是他不懂 任何一门欧洲语言;恰好,一个说粤语的广东人也去欧洲旅行,而 且,他懂得德语、英语、法语、西班牙语等所有欧洲语言,他们结伴 同行。北京人想要同欧洲人交流,有两种方式:一是学习各种欧洲语 言,然后同各个国家的人直接交流;二是让广东人当翻译,将自己的 意思讲给欧洲人听,并将欧洲人的回答反馈给自己。如果您是那个北 京人,您选择哪种方式?我想答案是确定的,肯定要请广东人当翻 译。虽然普通话和粤语也有一定的差异,但是比起同欧洲语言的差异 来,这种差异小了很多。况且,如果直接同欧洲人交流,需要学习多 少门语言?
1.3 C++概述
• C++语言是美国Bell实验室的Bjarne Stroustrup 博士及同事在C语言的基础上,借鉴了simula语言 面向对象的机制,于80年代初开发出来的一种过 程性和对象性结合的程序设计语言,最初称为 “带类的C”,1983年Rick Mascitti将其更名为 一个有双关语的符号――“C++”。
• 链接(Link):将若干目标代码和现有的二进制代码库经 过链接器连接,产生可执行代码(Executable Code),文 件名为.exe。
1.4 C++开发环境的搭建
• C++的流行使得许多软件厂商都提供了自己的C++集成 开发环境,称为C++ IDE。著名的有Borland公司的C++ Builder(BCB),Microsoft公司的Visual C++(VC) 等等。所谓集成开发环境,在同一个环境下,能够完 成C++源程序的编写、连编、运行和调试。
• (2)应用软件
• 尽管系统软件虽然能有效处理计算机的内部功能,协助计算机使 用外围设备,但却没有把计算机转化成可以写报告,练打字,看 电影等多用途的机器,想要实现这些功能,需要安装应用软件。 应用软件程序面向特定的应用,如WORD用来处理文字,EXCEL用来 记录数据,还有供娱乐的游戏程序等等。
1.2.1 机器语言
• 计算机是一种电子设备,计算机处理的是数字信 号。数字信号采用0和1记录信息,那么计算机的 语言,称为机器语言(Machine Language),自 然也就是0和1序列。数字0和1称为二进制数据 (Binary Digit),或者称为位(Bit),这种0 和1的序列就称为二进制代码。
• 计算机极大地改变了我们的生活,这些都是由不同的软件来完成 的,这些软件称为计算机程序。有了程序,计算机才能为人类工 作,没有软件的计算机纯粹是废铁一堆。可以从商场里或网络上 方便地得到各种软件,如用来编辑文章的字处理软件,用来合理 组织数据的数据库软件,学习英语的软件,供人娱乐的游戏软件 等,这些软件是通过计算机程序设计语言编写的,本书介绍的C++ 就是一门功能强大的程序设计语言,掌握了C++,我们便可以根据 需要编写自己的软件。
1.2 程序设计语言
• 语言在人类的交流中的作用无可取代,要想交流 通畅,有共同的语言是首要条件,打个比方,一 个中国人想和一个英国人聊天,光靠比划手势是 不行的,有两条路可以选,要么学习英语,要么 找一个翻译。计算机程序设计同样如此,计算机 是无生命无知觉的机器,不懂人类的语言,不管 是汉语还是英语,计算机都不会接受,人类要想 和其交流,让计算机完成特定的任务,必须解决 “语言”的问题。同样,人类和计算机交流同样 有两条路:要么学习机器语言,要么找一个“翻 译”。机器语言是什么,“翻译”又是什么,下 面将给出解答。
1.4.1 Visual C++ 6开发环境简介
• Visual C++ 6集成开发环境,被划分成4个主要区 域:菜单和工具栏、工作区窗口、代码编辑窗口 和输出窗口,如图1.4所示。
1.1.2 计算机软件
• 软件是能完成特定功能的程序,软件大体上可以分为两类:
• (1)系统软件
• 系统软件是用来控制计算机,管理计算机上的资源,使计算机的 硬件有效起作用的。在系统启动时装载入内存的程序集合称为操 作系统,没有操作系统的计算机什么也干不了,操作系统除了进 行内存管理、文件管理和输入输出管理外,一般都提供了很多系 统级的服务供用户调用。但不要认为操作系统程序是多么的高深 莫测,从本质上所,它也是用程序设计语言写出来的。只要你掌 握了程序设计的原理和硬件系统的相关知识,你甚至可以写出自 己的操作系统。除了操作系统外,设备驱动程序和其他一些管理 工具也可以归入系统软件的范畴。
• C++语言是C语言的一个超集,它是一门混合型的语言,既 支持传统的结构化程序设计,又支持面向对象的程序设 计,这是C++语言成功流行的一个重要原因。
• 读者可能产生疑问,既然面向对象的程序设计方法比结构 化的程序设计方法先进许多,为什么C++语言仍旧支持后 者,而不愿意成为一门纯粹的面向对象的程序设计语言?
• 结构化程序设计方法建立在Bohm、Jacopini证明的结构定理的基础上,结构定理指 出:任何程序逻辑都可以用顺序、选择和循环等3种基本结构来表示,如所示。
1.2.6 面向对象的程序设计(OOP)
• 面向对象的程序与结构化的程序不同,由C++编写的结构化 的程序是由一个个的函数组成的,而由C++编写的面向对象 的程序是由一个个的对象组成的,对象之间通过消息而相 互作用。
• 数据结构:即数据的存储形式,程序用到的信 息。
• 算法:操作步骤,对操作的描述,程序用什么方 法解决问题。
• 著名的计算机科学家Nikiklaus Wirth提出了一个 公式:
• 程序 = 数据结构 + 算法。
1.2.5 面向过程的程序设计(POP)
• 在60年代计算机发展的初期,计算机和编程是少数聪明人的玩具,程序员可以根据自 己的喜好随心所欲地进行程序设计,大多数程序代码组织混乱,可以说只有作者本人 可以看懂,被称为“意大利面条式编程”,随着计算机的发展和程序规模的不断扩 大,一大堆的问题凸现出来:程序质量低下,进度延误,预算严重超支,这就是“软 件危机”。为此,人们提出了结构化程序设计方法,探讨了面向过程编程的3种基本 结构,即顺序、分支和循环,大大提高了程序的清晰度和可靠性,在一定程度上缓解 了“软件危机”。
• 高级语言和计算机的关系,与北京人的语言和欧洲人的关系相似。高 级语言编写的程序借助于编译器就可以在特定的机器上运行,不同的 欧洲人相当于不同的计算机,广东人相当于编译器,粤语相当于计算 机高级语言。
1.2.4 数据结构和算法
• 计算机程序规定了计算机要执行哪些动作及这些 动作应当按什么顺序来执行,如同菜谱规定了厨 师做菜的材料和步骤。一个程序主要有以下两个 要素:
• 编辑(Edit):使用文本编辑工具编写C++程序,其文件后 缀为.cpp,这种形式的程序称为源代码(Source Code)。
• 编译(Compile):用编译器将源代码转换成主机使用的内 部语言――二进制形式的机器语言,文件后缀为.obj,这 种形式的程序称为目标代码(Objective Code)。
第1章 C++概述
• 21世纪是个信息爆炸的时代,计算机、信息技术的发展日新月 异,极大地改变着我们的沟通方式和生活方式。“足不出户天下 知”已成现实,网上冲浪和网络聊天早已不是什么新名词,网上 炒股、网上办公、网络会议,也因其方便快捷,得到了广泛的应 用。撇开网络不谈,计算机在其他方面也成为人类不可缺少的工 具与伙伴,有了计算机,学生可以事半功倍地完成课程的学习, 仓库管理员能更高效地完成工作,家庭主妇能保证收支的平衡, 更好地管理财务,这样的例子数不胜数。
• 对 初 学 者 而 言 , 不 要 被 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.3.3 C++程序开发基本过程
• 下面开始我们的编程之旅,开发一个C++程序,首先要建立 问题的模型,根据具体问题的特点,选择过程模型或者对 象模型,并将模型实现为源程序。
• 同其它高级语言一样,要想得到可以执行的C++程序,必须 对C++源程序进行编译和链接,该过程如所示,大体有以下 几个步骤:
来自百度文库
1.3.1 C++语言发展历程
• 最初,Stroustrup使用了一个C++到C的编译器程序,将C++源代码 翻译成C代码,然后通过标准的C编译器将其转化成二进制代码, 随着C++的日渐普及,才出现了独立的C++编译器,直接将C++代码 编译成目标代码,这种方式,突出了C++“由C语言而来,却不同 于C语言”的独立地位。
• 即便是完成相近的功能,不同的计算机的设计者 也可能会采用不同的二进制代码集来表示程序指 令,换句话说,不同的计算机使用的机器语言并 不一定相同,不过可以肯定的是,现代计算机都 是以二进制代码的形式存储和处理数据的。
1.2.2 汇编语言
• 汇编语言(Assembly Language)的出现简化了程 序员的工作,在汇编语言中,用便于记忆的方法 定义程序指令,表1给出了汇编语言指令机器语言 指令的对应关系。
• C++灵活而强大的功能,很快就受到了计算机软件厂商的青睐,并 不断对C++进行细化,促进了C++的发展。虽然多数公司和科研单 位都希望自己的C++版本能和其他版本兼容,但如果没有一个标准 的出台,这将很难做到。为此,美国国家标准局在1990年设立了 一个委员会(ANSI X3J16),专门负责C++标准的制定。ANSI/ISO C++国际标准第一版于1998年正式发布,2003年又发布了C++国际 标准第二版,新的标准是对第一版的整理――修订错误,减少歧 义等,并没有改变语言特性,本书所有介绍和实例代码都是基于 新的C++国际标准的。当然,C++还在不断地发展中,下一版的C++ 标准制定工作已经开始,该版本被称为C++ 0X,预期完工时间为 2009年前后。
1.1 了解计算机
• 通俗地讲,计算机是个“超级工具”,是个能执 行命令的电子设备。几乎所有的计算机都遵循 冯·诺伊曼的“存储――运行”结构,有以下基 本功能:输入、输出、存储、执行算术和逻辑运 算。计算机主要由硬件和软件两大部分组成,首 先看一下什么是硬件。
1.1.1 计算机硬件
• 计算机的硬件主要有中央处理器(CPU, Central Processing Unit)、内存(或称主存、随机处理器、 RAM――Random Access Memory)、输入/输出设备 (Input/Output Devices)和外部存储设备(Secondary Storage,多数为具备海量存储能力的硬盘),说明了计算 机的硬件结构。
1.3.2 C++语言特点
• C++语言是以C语言为基础扩充、发展起来的一种优秀的通 用程序设计语言,它保存了C语言的紧凑、灵活、高效和移 植性好的特点,又吸收了其他程序设计语言的优秀特性, 从simula中吸收了类的机制,从Algol中吸收了运算符重 载、引用和在局部的任何地方声明变量,综合了Ada的类属 和异常处理机制。
1.2.3 高级语言
• 既然机器语言和汇编语言都是计算机可以理解的语言,用其可以完全 控制计算机的行为,那么为什么人们还要创造并使用高级程序设计语 言呢?因为机器语言和汇编语言都是低级语言,是面向机器的,与具 体的计算机相关。学习起来困难,编程效率也低,可读性、可维护性 也差。
• 还是举个例子,一个说普通话的北京人想要去欧洲旅行,可是他不懂 任何一门欧洲语言;恰好,一个说粤语的广东人也去欧洲旅行,而 且,他懂得德语、英语、法语、西班牙语等所有欧洲语言,他们结伴 同行。北京人想要同欧洲人交流,有两种方式:一是学习各种欧洲语 言,然后同各个国家的人直接交流;二是让广东人当翻译,将自己的 意思讲给欧洲人听,并将欧洲人的回答反馈给自己。如果您是那个北 京人,您选择哪种方式?我想答案是确定的,肯定要请广东人当翻 译。虽然普通话和粤语也有一定的差异,但是比起同欧洲语言的差异 来,这种差异小了很多。况且,如果直接同欧洲人交流,需要学习多 少门语言?
1.3 C++概述
• C++语言是美国Bell实验室的Bjarne Stroustrup 博士及同事在C语言的基础上,借鉴了simula语言 面向对象的机制,于80年代初开发出来的一种过 程性和对象性结合的程序设计语言,最初称为 “带类的C”,1983年Rick Mascitti将其更名为 一个有双关语的符号――“C++”。
• 链接(Link):将若干目标代码和现有的二进制代码库经 过链接器连接,产生可执行代码(Executable Code),文 件名为.exe。
1.4 C++开发环境的搭建
• C++的流行使得许多软件厂商都提供了自己的C++集成 开发环境,称为C++ IDE。著名的有Borland公司的C++ Builder(BCB),Microsoft公司的Visual C++(VC) 等等。所谓集成开发环境,在同一个环境下,能够完 成C++源程序的编写、连编、运行和调试。
• (2)应用软件
• 尽管系统软件虽然能有效处理计算机的内部功能,协助计算机使 用外围设备,但却没有把计算机转化成可以写报告,练打字,看 电影等多用途的机器,想要实现这些功能,需要安装应用软件。 应用软件程序面向特定的应用,如WORD用来处理文字,EXCEL用来 记录数据,还有供娱乐的游戏程序等等。
1.2.1 机器语言
• 计算机是一种电子设备,计算机处理的是数字信 号。数字信号采用0和1记录信息,那么计算机的 语言,称为机器语言(Machine Language),自 然也就是0和1序列。数字0和1称为二进制数据 (Binary Digit),或者称为位(Bit),这种0 和1的序列就称为二进制代码。
• 计算机极大地改变了我们的生活,这些都是由不同的软件来完成 的,这些软件称为计算机程序。有了程序,计算机才能为人类工 作,没有软件的计算机纯粹是废铁一堆。可以从商场里或网络上 方便地得到各种软件,如用来编辑文章的字处理软件,用来合理 组织数据的数据库软件,学习英语的软件,供人娱乐的游戏软件 等,这些软件是通过计算机程序设计语言编写的,本书介绍的C++ 就是一门功能强大的程序设计语言,掌握了C++,我们便可以根据 需要编写自己的软件。
1.2 程序设计语言
• 语言在人类的交流中的作用无可取代,要想交流 通畅,有共同的语言是首要条件,打个比方,一 个中国人想和一个英国人聊天,光靠比划手势是 不行的,有两条路可以选,要么学习英语,要么 找一个翻译。计算机程序设计同样如此,计算机 是无生命无知觉的机器,不懂人类的语言,不管 是汉语还是英语,计算机都不会接受,人类要想 和其交流,让计算机完成特定的任务,必须解决 “语言”的问题。同样,人类和计算机交流同样 有两条路:要么学习机器语言,要么找一个“翻 译”。机器语言是什么,“翻译”又是什么,下 面将给出解答。
1.4.1 Visual C++ 6开发环境简介
• Visual C++ 6集成开发环境,被划分成4个主要区 域:菜单和工具栏、工作区窗口、代码编辑窗口 和输出窗口,如图1.4所示。
1.1.2 计算机软件
• 软件是能完成特定功能的程序,软件大体上可以分为两类:
• (1)系统软件
• 系统软件是用来控制计算机,管理计算机上的资源,使计算机的 硬件有效起作用的。在系统启动时装载入内存的程序集合称为操 作系统,没有操作系统的计算机什么也干不了,操作系统除了进 行内存管理、文件管理和输入输出管理外,一般都提供了很多系 统级的服务供用户调用。但不要认为操作系统程序是多么的高深 莫测,从本质上所,它也是用程序设计语言写出来的。只要你掌 握了程序设计的原理和硬件系统的相关知识,你甚至可以写出自 己的操作系统。除了操作系统外,设备驱动程序和其他一些管理 工具也可以归入系统软件的范畴。
• C++语言是C语言的一个超集,它是一门混合型的语言,既 支持传统的结构化程序设计,又支持面向对象的程序设 计,这是C++语言成功流行的一个重要原因。
• 读者可能产生疑问,既然面向对象的程序设计方法比结构 化的程序设计方法先进许多,为什么C++语言仍旧支持后 者,而不愿意成为一门纯粹的面向对象的程序设计语言?