首页 吕凤翥C++语言基础教程(第2版)+课件材料

吕凤翥C++语言基础教程(第2版)+课件材料

举报
开通vip

吕凤翥C++语言基础教程(第2版)+课件材料关于使用课件的几点说明 1. 本人认为课件最好是讲课老师自己作,这里只提供一此参考资料,供讲课老师备课时参考。我所提供的内容尽量多些,不需要的可以删减。 2. 该课件是按教材章节顺序编写,基本上包含教材中的全部内容。在实际学中,讲课老师可以参照该课件适应增删。 3. 课件中只给出纲要,没有具体例子,讲课时可由老师举一些或者书中例子或者书外例子。给老师一些灵活性及选择性。 4. 每章讲完后老师可根据情况选择一些作业题和上机指导题。这里没具体给出。 5. 建议不要把书中程序作在课件里,需要时让同学们看书。补...

吕凤翥C++语言基础教程(第2版)+课件材料
关于使用课件的几点 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 1. 本人认为课件最好是讲课老师自己作,这里只提供一此参考资料,供讲课老师备课时参考。我所提供的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 尽量多些,不需要的可以删减。 2. 该课件是按教材章节顺序编写,基本上包含教材中的全部内容。在实际学中,讲课老师可以参照该课件适应增删。 3. 课件中只给出纲要,没有具体例子,讲课时可由老师举一些或者书中例子或者书外例子。给老师一些灵活性及选择性。 4. 每章讲完后老师可根据情况选择一些作业 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 和上机指导题。这里没具体给出。 5. 建议不要把书中程序作在课件里,需要时让同学们看书。补充的程序可放在课件中字体大些让同学们看清。 6. 作课件时要将背景色与前景色的反差大些,否则远处看不清。 7. 根据学生情况,如果学生对C语言有所了解,则前4章可以少讲些。只要复习一下C语言的内容就可以了。 作者 第1章 C++语言概述  1.1 面向对象程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的有关概念  1.1.1 面向对象 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 的由来和发展  在面向对象方法出现之前,人们采用的是面向过程的方法。面向过程方法是一种传统的求解问题的方法。 面向对象方法是求解问题的一种新方法,它把求解问题中客观存在的事物看作各自不同的对象,再把具有相同特性的一些对象归属为一个类 面向对象方法是计算机科学发展的要求。这种方法满足了人们对信息的需求量越来越大,对软件开发的规模也越来越大,对软件可靠性和代码的重用性的要求越来越高的客观需要。 1.1.2 面向对象的基本概念  1.对象 对象是现实世界中客观存在的某种事物。对象是一种相对独立的实体,它具有静态特性和动态特性,通常通过一组数据来描述对象的静态特性,使用一组行为或功能来表示对象的动态特性。 2.类 类是人们对于客观事物的高度抽象。 面向对象方法中的类是一种类型,它是具有相同属性和行为的对象的集合。类是具有相同属性和行为的若干对象的模板。类为属于该类的全部对象提供了抽象的描述,这种描述包括了属性和行为两大部分。 3.封装 封装是指把对象的属性和行为结合成一个独立的单位,又称为封装体。 封装体具有独立性和隐藏性。 一个封装体与外部联系只能通过有限的接口。 4.继承 继承是面向对象方法提高重用性的重要措施,继承表现了特殊类与一般类之间的关系。继承的重要性就在于它大大地简化了对于客观事物的描述。 5.多态性 多态性指的是一种行为对应着多种不同的实现。在同一个类中,同一种行为可对应着不同的实现。 1.2 C++语言的特点  1.2.1 C++语言是面向对象的程序设计语言  1.支持封装性 C++语言允许使用类和对象。类是支持数据封装的工具,对象是数据封装的实现。 类中成员有不同的访问权限。 2.支持继承性 C++语言支持面向对象方法中的继承性,它不仅支持单重继承,而且支持多重继承。 继承和封装是衡量一种语言是否是面向对象的程序设计语言的两个重要标准。 3.支持多态性 多态性是在继承性基础上的面向对象方法中的重要特性之一。 1 支持函数重载和运算符重载。 ② 支持动态联编。 1.2.2 C++语言继承了C语言  C++语言与C语言兼容,C语言是C++语言的一个子集。 C++语言具有C语言的简练明了的风格,同时还保留某些C语言的面向过程的特性。实际上,C++语言是一种不完全的面向对象的程序设计语言。 1.2.3 C++语言对C语言进行了改进  1 C++语言中规定函数定义时必须指出类型。 2 C++语言规定函数说明必须使用原型说明,不得用简单说明。 ③ C++语言规定凡是从高类型向低类型转换时都需加强制转换。 ④ C++语言中符号常量建议使用const关键字来定义。 ⑤ C++语言中引进了内联函数。 ⑥ C++语言允许设置函数参数的默认值。 ⑦ C++语言引进了函数重载和运算符重载。 ⑧ C++语言引进了引用概念,使用引用作函数的参数和返回值。 ⑨ C++语言提供了与C语言不同的I/O流类库,方便了输入/输出操作。 ⑩ C++语言为方便操作还采取了其他措施。 1.3 C++语言的词法皮词法规则  1.3.1 C++语言的字符集 C++语言字符集同于C语言字符集。 1.大小写英文字母 2.数字字符 3.其他字符 1.3.2 单词及其词法规则  1.标识符 标识符是用来命名程序中一些实体的一种单词。使用标识符来命名的有变量名、函数名、类名、对象名、常量名、类型名、语句标号名、宏名等。 C++语言规定,标识符是由大小写字母、数字字符和下划线符组成的,并且以字母或下划线开头的字符集合。 2.关键字 关键字是系统已经定义过的标识符,它在程序中已有了特定的含义。下列是C++语言中常用的关键字。 auto break case char class const continue default delete do double else enum explicit extern float for friend goto if inline int long mutable new operator private protected public register return short signed sizeof static static_cast struct switch this typedef union unsigned virtual void while 3.运算符 运算符是一种用于进行某种操作的单词。运算符是由1个或多个合法字符组成的。 C++语言的运算符除包含了C语言的全部运算符外,还增加了5个新的运算符。 4.分隔符 C++语言中常用的分隔符与C语言中的相同,它们包括几种。 ① 空格符:用做单词之间的分隔符。 ② 逗号符:用做变量名之间或对象名之间的分隔符,还可以用做函数表中参数之间的分隔符。 ③ 分号符:专用在for循环语句中关键字for后边括号内的3个表达式之间的分隔符。 ④ 冒号符:仅用做语句标号和语句之间以及开关语句中case<整常型表达式>与语句序列之间的分隔符。 另外,单撇号、双撇号和花括号用于某些实体的定界符。 5.常量 C++语言的常量种类与C语言的常量种类相同,有数字常量(包括整型常量和浮点型常量)、字符常量、字符串常量和枚举常量。 C++语言中使用关键字const来定义符号常量。 6.注释符 C++语言中保留了C语言的注释符(/*和*/),并且还使用一种新的行注释符。 行注释符(//)用来注释从该注释符以后的该行信息为注释信息。 1.4 C++程序在结构上的特点  1.4.1 C++程序举例  见书中例1.1。 1.4.2 C++程序结构上的特点  ① C++语言程序是由若干个类和函数组成的。这些类和函数可以放在一个文件中,也可以放在多个文件中。 ② C++语言程序中的函数有两个种类,一个种类是类体内的成员函数,另一个种类是类体外的一般函数。 ③ C++程序中有且仅有一个主函数main()。C++程序是从主函数开始执行的。 ④ C++程序中的函数都是由函数头和函数体构成的,函数体由若干条语句组成的;函数头中包括函数名、函数类型和函数参数。 ⑤ C++语言程序与C语言程序一样,可以使用预处理命令,也可以使用注释信息。 1.4.3 C++程序的书写格式 C++程序分C语言程序一样,可读性较差,要注意书写格式。通常遵循下列约定: 一行写一条语句。短语句可以一行写多个,长语句也可以写多行。 采用适当的缩格书写方式很重要。 大括号的使用要统一。 见书中例1.2和例1.3。 1.5 C++程序的实现  1.5.1 C++程序的编辑、编译和运行  1.编辑 编辑是将编写好的C++语言源程序通过输入设备录入到计算机中,生成磁盘文件加以保存。 2.编译 整个编译过程可分为如下3个子过程。 1 预处理过程。 ② 编译过程。 ③ 连接过程。 3.运行 运行可执行文件后,在屏幕上输出显示其运行结果。 1.5.2 C++程序实现举例  学会一种C++语言的实现方法,本书介绍了VC++ 6.0的基本用法。 1.单文件程序的实现方法 见例1.4 2.多文件程序的实现方法 见例1.5 作业题和上机练习题 第2章 数据类型和表达式  2.1 基本数据类型  基本数据类型有下述几种类型。 整型 字符型 浮点型 空值型 布尔型 可用的修饰符有以下4种。 signed 表示有符号型,常被省略。 unsigned 表示无符号型。 long 表示长型。 short 表示短型。 表2.1列出了各种基本数据类型的类型名、数据宽度(即在内存中占的字节数)和取值范围。这里给出的取值范围和数据宽度是在32位机中的情况,对于16位机应适当调整。 表2.1 C++语言的基本数据类型 类 型 名 说 明 字 宽 范 围 char 字符型 1 signed char 有符号字符型 1 (128~127 unsigned char 无符号字符型 1 0~255 short [int] 短整型 2 (32768~32767 signed short [int] 有符号短整型 2 (32768~32767 unsigned short [int] 无符号短整型 2 0~65535 int 整型 4 (2147483648~2147483647 signed [int] 有符号整型 4 (2147483648~2147483647 unsigned [int] 无符号整型 4 0~4294967295 long [int] 长整型 4 (2147483648~2147483647 signed long[int] 有符号长整型 4 (2147483648~2147483647 unsigned long [int] 无符号长整型 4 0~4294967295 float 单精度浮点型 4 约6位有效数字 double 双精度浮点型 8 约12位有效数字 long double 长双精度浮点型 16 约15位有效数字 bool 布尔型 1 true,false 2.2 常量和变量  2.2.1 常量  1.整型常量 整型常量可以用十进制、八进制和十六进制表示。 (1)十进制整型常量 (2)八进制整型常量 (3)十六进制整型常量 2.浮点型常量 浮点型常量的表示形式有如下两种。 ① 小数表示形式,又称一般形式。具体格式如下: <整数部分>.<小数部分> ② 指数表示形式,又称科学表示法。具体格式如下: <整数部分>.<小数部分>e<指数部分> 浮点型常量分单精度、双精度和长双精度3类。 3.字符型常量 字符型常量是用一对单撇号括起一个字符来表示的。字符型常量表示方法有如下两种。 1 用一对单撇号括起一个图形符号。 2 用一对双撇号括起反斜线符加上字符的ASCII码值。这里可使用下述两种形式: '\0ddd' 和 '\xhh' 表2.1 C++语言中常用的转义字符 符 号 含 义 符 号 含 义 \a 鸣铃 \\ 反斜线 \n 换行符 \' 单撇号 \r 回车符 \" 双撇号 \t 水平制表符(Tab键) \0 空字符 \b 退格符(Backspace键) 4.字符串常量 字符串常量是由一对双撇号括起的字符序列。 字符串常量可由任何字符组成,包含空格符、转义字符和其他字符,也包含汉字。 字符串都有一个结束符,用来标识字符串的结束。该结束符是'\0',即ASCII码值为0的空字符。 字符常量与字符串常量是有区别的。 5.枚举常量 枚举是一种构造数据类型,具有这种类型的量称为枚举量。枚举是若干有名字的整型常量的集合,这些整型常量组成了枚举表,枚举表中的每一项称为枚举符,枚举符实际上是一个具有名字的常量。枚举量便是该枚举表中的一个枚举符,它实际上是一个int型常量,故称为枚举常量。 (1)枚举类型和枚举常量的定义 定义枚举常量之前必须先定义枚举类型。枚举类型的定义格式如下: enum<枚举名>{<枚举表>}; 例如, enum day {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; 枚举符的值可以在定义时被显式赋值。某个枚举符被显式赋值后,它的值就是被赋的值。没有被赋值的枚举符的值是它前一个的值加1。 枚举量的定义格式如下: enum <枚举名> <枚举量名表>; 或者在定义枚举类型的同时定义枚举量: enum <枚举名>{<枚举表>} <枚举量名表>; (2)枚举量的值 枚举量的值被限定为该枚举类型的枚举表中的某个枚举符。枚举量是通过对应枚举表中的枚举符给它赋值的。 (3)使用枚举量的好处 ① 枚举量的取值范围受到一定的限制,这将增加数据的安全性。 ② 枚举量使用具有整型值的枚举符,可增加程序的可读性。 ③ 被说明的枚举量系统进行类型检查,这样也会增加数据的安全性。 6. 符号常量  在C++程序中,所出现的常量通常使用符号常量来表示。符号常量就是使用一个标识符来表示某个常量值。使用符号常量不仅可增加程序的可读性,而且为修改常量值带来极大的方便。 在C++语言中,定义常量使用常类型说明符const。具体定义格式如下: const <类型说明符> <常量名>=<常量值>; 或者 <类型说明符> const <常量名>=<常量值>; 定义常量时应做到如下几点: 使用常类型说明符const; 确定常量名,同标识符; 指定常量类型; 给出常量值。 由于C++语言与C语言兼容,C语言中使用宏定义来定义符号常量在C++语言中也可使用。 见书中例2.1 2.2.2 变量  1.变量的名字 给变量起名字时应注意遵守下列规则。 ① 变量名同标识符,组成变量名中的字母大小写是有区别的。 ② 命名变量时应尽量做到“见名知意”,这样有助于记忆,并增加可读性。 ③ 系统中使用的关键字、库中的类名和函数名等不能用作变量名。 ④ 变量名长度没有限制,但不宜过长,通常不超过31个字符。 2.变量的类型 变量的类型包括数据类型和存储类。 (1)数据类型 数据类型分为基本数据类型和构造数据类型两种。 ① 基本数据类型 基本数据类型如前所述。 ② 构造数据类型 构造数据类型又称用户自定义数据类型。这种数据类型主要包括数组、结构、联合和类等。 (2)存储类 存储类是指变量被存放的地方,存放的地方不同决定其寿命和作用域不同。 变量的存储类有如下4种: ① 自动类(auto); ② 寄存器类(register); ③ 外部类(exfern); ④ 静态类(static)包括内部静态和外部静态。 各种不同存储类的特点如下。 ① 从寿命上讲,自动类和寄存器类的寿命是短的。外部类和静态类的寿命是长的。 ② 从作用域上讲,自动类,寄存器类和内部静态类的作用域是在定义或说明它们的函数体内或分程序内。外部类的作用域是整个程序,包括该程序的所有文件。外部静态类的作用域是定义或说明它的文件内,并从定义时开始。 3 任何一个变量在定义或说明时都要给出存储类。 4 静态类和外部类变量在定义或说明中不给初值时,它们具有默认值;自动类和寄存器类变量在定义或说明中不给初值时,它们具有无意义值。 3.变量的值 (1)变量的两个值 变量被定义后,它就应该具有两个值。 ① 变量本身值。该值是在定义变量时获取的,该值可以被改变。 ② 变量地址值。该值是由系统分配内存空间时确定的,它是一个内存地址值,该值是不能改变的。 (2)变量值获取的两种方法 ① 定义或说明变量时变量可获取初值、默认值或无意义值。 ② 通过赋值方法改变变量的值。 4. 变量的定义格式  定义一个变量其格式如下: <类型> <变量名> = <初值>,<变量名>… 一个变量被定义后,它就有确定的作用域和寿命,并且具有确定的地址值,其变量值或者为某个初值,或者为默认值,或者为无意义值。 定义变量时必须给出的有: ① 变量名,同标识符; ② 变量数据类型; ③ 变量存储类,省略的是自动类,不给出的是外部类。 另外,定义或说明变量时可以给变量赋初值,也可以不给变量赋初值。 见本书例2.2 2.3 数组  2.3.1 数组的定义格式  数组是C++语言中的一种构造的数组类型。数组类型的具体描述是数目固定、类型相同的若干个变量的有序集合。 数组的定义格式如下: <类型说明符> <数组名> [<大小1>] [<大小2>]… (1)一维数组 一维数组的定义格式如下: <类型说明符> <数组名> [<大小>] 例如, int a[5]; (2)二维数组 二维数组定义格式如下: <类型说明符> <数组名> [<大小1>] [<大小2>] 例如, int bb [3] [5]; (3)三维数组 三维数组的定义格式如下: <类型说明符> <数组名> [<大小1>] [<大小2>] [<大小3>] 例如, int aaa[2] [3] [5]; 2.3.2 数组的赋值 1. 数组元素表示 数组元素表示格式如下: <数组名> [<下标1>] [<下标2>]… 数组元素被存放在机器的内存中是按顺序存放的。 2.数组元素的初始化 数组初始化是使用初始值表进行的。 (1)一维数组的初始化 一维数组初始化使用一重初始值表,其格式如下: <类型说明符> <数组名> [<大小>]={<数据项表>}; 在使用初始值表给数组元素初始化时,要求初始值表中数据项的个数小于或等于数组元素的个数。数组在赋初值时是不会越界的。 在定义一维数组并给它进行初始化时,可以省略数组的大小。 (2)二维数组的初始化 二维数组的初始化使用二重初始值表,其格式如下: <类型说明符> <数组名> [<大小1>] [<大小2>]={{<数据项>}, {<数据项>}, …}; 同样,在定义二维数组并同时初始化时,二维数组中第1维的大小可以省略,但是第2维的大小不能省略。例如, (3)三维数组的初始化 三维数组初始化可使用三重初始值表,其格式如下: <类型说明符> <数组名> [<大小1>] [<大小2>] [<大小3>]= {{{<数据项>}, {<数据项>}, …}, {{<数据项>}, {<数据项>}, …}, …}; 在给三维数组的初始化的定义中也可以不指定一维的大小,由系统根据初始值表中的数据项来确定其大小。 3.数组元素的赋值 数组的赋值实际上是给数组的各个元素赋值。给数组元素赋值的方法是通过赋值表达式进行的。 2.3.3 字符数组   1. 字符数组的定义格式 字符数组的定义格式与一般数组的定义格式相同,所不同的是数据类型说明符使用char,字符数组也分一维、二维和三维字符数组。 2. 字符数组的初始化 在定义字符数组时也可以给该数组进行初始化,初始化的方法以下有两种。 (1)使用初始值表 使用初始值表给定义的字符数组初始化时,初始值表中的数据项应该是字符常量,或者是字符常量表达式。 (2)使用字符串常量 使用字符串常量给定义的字符数组初始化时,该字符数组中存放被赋初值的字符串。 3. 字符数组的赋值 字符数组的赋值就是使用赋值表达式语句给字符数组中的每个数组元素赋值。每个数组元素的值应是一个字符常量。通过采用如下两种方法为字符数组赋值。 ① 使用赋值表达式语句逐个对每个数组元素赋值。 2 使用循环语句给字符数组的各个元素赋值。 2.4 指针和引用  2.4.1 指针  1. 什么是指针 指针是一种特殊的变量。 指针的名字同标识符。 指针的值是用来存放某个变量或对象的地址值的。 指针的类型是该指针所指向的变量或对象的类型。一个指针存放了哪个变量或对象的地址值,则该指针就指向哪个变量或对象。 总之,对指针的认识简单描述如下: 指针是一种用来存放某个变量或对象地址值的变量;一个指针存放了哪个变量或对象的地址值,则该指针便指向哪个变量。指针的类型是该指针所指向的变量的类型。 下面通过图示方法介绍指针与它所指向的变量的关系。 2. 指针的定义格式  指针的定义格式如下: <类型> * <指针名> [=<初值>]; 下面列举一些常用的不同类型的指针的定义格式。 double *pd; // pd是一个指向double型变量的指针 char *pc; // pc是一个指向char型变量的指针 float *pfl; // pfl是一个指向float型变量的指针 int (*pa)[3]; // pa是一个指向一维数组的指针,该数组是具有3个元素的int  型数组。 int (*pfu)(); // pfu是一个指向函数的指针,该函数是一个无参数的int型函数。 int **pp; // pp是一个指向一级指针的指针,即为二级指针。 3. 指针的赋值运算  指针在定义或说明时可以被赋初值,指针也可以被赋值。 指针赋值的规则如下: 指针被赋的值应该是变量或对象的地址值,并且要求类型相同、级别一致。 在给指针赋值时除了要遵循上述规则外,还应注意如下事项。 ① 指针定义后在没有确定值前绝对不能使用。 ② 暂时不用的指针为了安全起见,可先给它赋值为0,即为一空指针。 ③ 可将一个已知指针赋值给相同类型的另一个指针。 ④ 指针可以使用malloc()函数赋值。例如, int *p; p = (int*) malloc(sizeof(int)); 4. 指针的运算 (1) 赋值运算 同前 (2) 指针可加减整型数运算 指针可以被加上或减去一个int型数,包括加1或减1运算。 (3) 指针的比较运算和相减运算  在一定条件下,两个指针可以进行比较,也可以进行相减运算。 2.4.2 指针和数组   1. 指针可表示数组元素  (1) 一维数组元素的指针表示 C++语言规定数组名是一个常量指针,该指针的值是该数组首元素的地址值。 假定一维数组a定义如下: int a[5]; 该数组的下标表示为a[i],i=0~4。 该数组第i个数组元素的值表示为: *(a+i), 其中,i=0~4。 (2) 二维数组元素的指针表示 假定b是一个二维数组,定义如下: int b[3] [5]; 该数组元素的下标表示为b[i][j],其中,i=0~2,j=0~4。 二维数组元素用一级指针表示为: *(&b[0][0]+5*i+j) 二维数组可以看作是由行数组和列数组组成的,行数组和列数组都是一维数组。 二维数组元素中行、列数组都用指针表示的形式如下: *(*(b+i)+j) 当行数组用指针,列数组用下标表示的形式如下: (*(a+i))[j] 当行数组用下标,列数组用指针表示的形式如下: *(a[i]+j) 二维数组元素的地址值表示有如下几种形式: &b[i][j], b[i]+j, *(b+i)+j, &b[0]+5*i+j, &(*(b+i))[j] 二维数组的行地址表示有如下几种形式: a+i, &a[i] 二维数组的行地址是一个二级指针的地址值,它的值就是该行首列元素的地址值。 (3) 三维数组元素的指针表示 假定三维数组c定义如下: int c[2] [3] [4]; 三维数组元素都用下标表示为 c[i][j][k],其中,i=0~1, j=0~2, k=0~3 三维数组元素都用指针表示为 *(*(*(c+i)+j)+k) 三维数组元素中二维用指针一维用下标表示为 (*(*cc+i)+j) [k] *((*(c+i))[j]+k *(*(c[i]+j)+k) 三维数组元素中一维用指针二维用下标表示为 (*(c+i))[j] [k] (*(c[i]+j)) [k] *(c[i][j]+k) 还有一种是按三维数组在内存中存放顺序用数组的首地址表示如下: *(&c[0][0][0]+3*4*i+4*j+k) 见例2.1至例2.5。 2. 指针数组和指向数组的指针 (1) 指针数组 数组元素为指针的数组称为指针数组。 格式如下: <类型> * <指针数组名>[<大小>] 见书中例2.5。 (2) 指向数组的指针 指向数组的指针可指向一维数组或二维数组,它们分别是二级指针或三级指针。 指向一维数组指针格式如下: <类型> (*<指针名>)[<大小>] 见书中例2.6。 2.4.3 字符指针  1.字符指针 字符指针是指向字符串的指针。 字符指针指向字符串的首字符。由于字符指针名是变量指针,要比字符数组名(常量指针)操作起来更加方便。 字符数组只能在定义或说明时用字符串对它进行初始化,而字符指针不仅可用字符串对它进行初始化,而且还可以用字符串对它赋值。 见书中例2.7。 2. 字符指针数组 字符指针数组是指数组元素为字符指针的数组。它可用来存放若干个字符串。 见书中例2.8。 2.4.3 引用  1.引用的概念 引用是某个变量或对象的别名。引用不是变量,引用不占用内存空间。在建立引用时要用某个变量或对象对它初始化,于是引用便绑定在用来给它初始化的那个变量或对象上。 当创建某个变量的引用后,引用的值就是被引用的变量值,引用的地址值也是被引用的变量的地址值。 引用的创建格式如下: <类型> & <引用名> = <变量名/对象名> 见书中侧2.9。 3. 引用的应用 引用在C++程序中主要用作函数参数和返回值。后边章节中举例。 2.5 运算符  C++语言中除了包含有C语言的全部运算符外,它本身还有如下所示的5个运算符。 (1)作用域运算符::。 (2)使用对象或指向对象的指针通过指向类的成员的指针表示类的成员的运算符·*和(>*。 (3)创建堆对象和堆对象数组的运算符new,释放堆对象和堆对象数组的运算符delete。 2.5.1 运算符的种类和功能  1.算术运算符 单目:((求负),++(增1),(((减1) 双目:+(求和),((求差),*(求积),/(求商),%(求余)。 说明: ①增1、减1运算符只能作用于变量,不能作用于常量和表达式。增1、减1运算符可以有前缀运算和后缀运算。前缀运算时,表达式值是变量增1或减1后的值;后缀运算时,表达式值是变量增1或减1前的值。无论前缀运算还是后缀运算变量值都被增1或减1。 ② 增1、减1运算符具有副作用。 2.关系运算符 双目:>(大于),<(小于),>=(大于等于),<=(小于等于),= =(等于),!=(不等于)。 3.逻辑表达式 单目:!(逻辑求反) 双目:&&(逻辑与),||(逻辑或) 4.位操作运算符 (1)逻辑位运算符 单目:~(按位求反) 双目:&(按位与),^(按位异或),|(按位或)。 (2)移位运算符 双目:<<(左移),>>(右移) 5.赋值运算符 双目:=(基本赋值),+=(加赋值),( =(减赋值),*=(乘赋值),/=(除赋值),%=(求余赋值),<<=(左移赋值),>>=(右移赋值),&=(按位与赋值),|=(按位或赋值),^=(按位异或赋值)。 说明: ①赋值运算符具有副作用。 ② 赋值运算符的结合性是由右至左的。 6.其他运算符 (1)三目运算符 三目:?: 格式如下: d1?d2:d3 (2)逗号运算符 双目:, 逗号运算符的优先级最低。 (3)字节数运算符 单目:sizeof 说明:该运算符是用求得某种类型或某个变量在内存中存放时所占的内存字节数。其格式如下: sizeof(<类型说明符>/<变量名>) (4)强制类型运算符 单目:(<类型说明符>) 说明:该运算符用来将一个表达式的类型强制为某种指定的数据类型,其格式如下: (<类型说明符>) <表达式> 或者 <类型说明符>(<表达式>) (5)取地址和取内容运算符 单目:&(取地址),*(取内容) 这是两个与指针运算相关的运算符。 (6)成员选择运算符 用来表示复杂数据类型成员的两个运算符:·和(>。这两个运算符将在第7、8章中介绍。 (7)括号运算符 圆括号运算符()是用来改变运算符优先级的。规定在表达式中先作括号内的运算符,多层括号时,先作其内层括号,后作外层括号。 方括号运算符[ ]用来表示数组的元素,方括号内是一个下标表达式。 2.5.2 运算符的优先级和结合性  1.运算符的优先级 C++常用运算符的功能、优先级和结合性如表2.3所示。 表2.3 C++常用运算符的功能、优先级和结合性 优 先 级 运 算 符 功 能 说 明 结 合 性 1 ( ) :: [ ] ·,(> ·*,(>* 改变优先级 作用域运算符 数组下标 成员选择 成员指针选择 从左至右 2 ++,( ( & * ! ~ +,( ( ) sizeof new,delete 增1、减1运算符 取地址 取内容 逻辑求反 按位求反 取正数,取负数 强制类型 取所占内存字节数 动态存储分配 从右至左 3 *,/,% 乘法,除法,取余 从左至右 4 +,( 加法,减法 5 <<,>> 左移位,右移位 6 <,<=,>,>= 小于,小于等于,大于,大于等于 7 ==,!= 相等,不等 8 & 按位与 9 ^ 按位异或 10 | 按位或 11 && 逻辑与 12 || 逻辑或 13 ?: 三目运算符 从右到左 14 =,+=,( =,*=, 赋值运算符 /=,%=,&=,^=, |=,<<=,>>= 15 , 逗号运算符 从左至右 2. 运算符的结合性 在优先级相同的情况下,表达式中操作数的计算顺序取决于结合性。 运算符的结合性有两种,一种是从左到右,另一种是从右到左,它们是单目、三目和赋值运算符。详见表2.3。 2.6 表达式  2.6.1 表达式的种类 共6种 2.6.2 表达式的值和类型 (1)求表达式值的几个步骤 首先,确定表达式中运算符的功能。 其次,确定操作数的计算顺序,先由优先级决定运算顺序。在优先级相同的情况下,由结合性决定计算顺序。 (2)确定表达式类型的方法 ① 算术表达式的类型取决于组成该表达式中各个操作数类型高的类型。 ② 关系表达式的类型是逻辑型。在有些编译系统中,真用1表示,假用0表示。 ③ 逻辑表达式的类型与关系表达式类型相同。 ④ 赋值表达式的类型由赋值表达式左值的变量类型决定。 ⑤ 条件表达式的类型取决于表达式中冒号前后两个操作数中类型高的类型。 ⑥ 逗号表达式的类型是组成该表达式的最右边操作数的类型。 表达式求值举例  1.算术表达式 由算术运算符和位操作运算符组成的表达式都是算术表达式。 见书中例2.10,例2.11。 2.关系表达式 由关系运算符组成的表达式是关系表达式。 见书中例2.12。 3.逻辑表达式 逻辑表达式是由逻辑运算符与操作数组成的式子。 见书中例2.13。 4.条件表达式 使用三目运算符组成的表达式称条件表达式,因为它具有简单的条件语句的功能。 见书中例2.14。 5.赋值表达式 由赋值运算符组成的表达式称为赋值表达式。 见书中例2.15。 6.逗号表达式 由逗号运算符将若干个表达式连成一个逗号表达式。 见书中例2.16。 2.6.3 表达式中的类型转换  1. 隐含转换  自动转换都是隐式的保值转换。这种转换的原则是由低类型转换为高类型的转换。 关于各种类型的高低顺序如下所示: int→unsigned→long→double→long double ↑ ↑ short float char 2. 强制转换  (1) 显式强制转换 显式强制转换是通过强制类型转换运算符来实现的。 (2) 隐式强制转换 1 赋值表达式中,右值表达式的类型隐式转换为左值变量的类型。 2 在被调用函数带有返回值时,将return后面的表达式类型隐式强制转换为函数的类型。 见书中例2.17 2.7 类型定义  1.类型定义语句的格式 类型定义语句格式如下: typedef <已有类型名> <新类型名表>; 2.使用类型定义语句时应注意的事项 使用类型定义语句定义新类型时应注意如下事项。 ① 通常为了将新定义的类型与系统已有类型加以区别,习惯于将新定义的类型名用大写字母。 ② 类型定义可以嵌套。 3.使用类型定义的好处 使用类型定义有如下几点好处。 ① 可增加所定义的变量的信息,改善程序的可读性。 ② 可以将复杂类型定义为简单类型,从而达到书写简练的目的。 ③ 可提高数据的安全性。 见书中例2.18。 2.8 结构和联合 2.8.1 结构  1. 结构和结构变量的定义  结构是一种构造数据类型,具有这种数据类型的变量称为结构变量。 结构类型定义格式如下: struct <结构名> { <若干成员说明> }; 定义结构变量的格式如下: struct <结构名> <结构变量名表>; 2. 结构变量成员的表示和赋值 结构变量的成员表示规则如下: 一般结构变量的成员用运算符.表示。 指向结构变量的指针的成员用运算符->表示。 结构数组元素的成员表示用运算符.。 结构变量可以被赋初值,也可以被赋值。 给指向结构变量的指针初始化可以用相同结构类型的结构变量的地址值或用存储分配函数malloc()。 结构变量的赋值规则如下。 可以将一个结构变量的值赋给另一个相同结构类型的结构变量。 结构变量的运算主要是该结构变量的成员的运算。结构变量成员的运算取决于该成员的类型。结构变量整体运算只有赋值运算。 见书中例7.19。 3. 结构变量在程序中的应用 结构变量和指向结构变量的指针在程序中通常作为函数的参数和函数的返回值。结构变量作函数参数实现传值调用,其调用效率较低,指向结构变量的指针作函数参数实现传址调用,其调用效率较高。 见书中例7.20。 2.8.2 联合 联合类型与结构类型在形式上有许多相似之处。除了使用的关键字不同,定义联合时用union,定义格式上,成员表示上基本相同。联合与结构的本质区别在于结构成员是异址的,联合成员是共址的,这一区别决定了联合的使用不像结构那么多,同时也决定的应用也很局限。 见书中侧2.21。 作业题和上机练习题 第3章 预处理和语句  3.1 预处理功能  3.1.1 文件包含命令  文件包含命令的格式如下: #include <<文件名>> 或者 #include "<文件名>" 使用尖括号引用要包含的文件名时,所包含的文件被系统存放在指定的目录下,;使用双撇号引用要包含的文件名时,系统先到当前目录下查找,再到相连的目录下查找,最后到系统所指定的目录下查找。 使用文件包含命令时,应注意如下事项。 ① 系统提供的被包含文件,选用尖括号的包含格式;用户定义的被包含文件,选用双撇号的包含格式。 ② 一条文件包含命令只能包含一个文件,若有多个被包含文件可使用多条文件包含命令。 ③ 定义的被包含文件中还可以使用文件包含命令。 ④ 为了提高被包含文件的利用效率,定义被包含文件时应尽量短小。 ⑤ 文件包含命令最好放在程序头。 3.1.2 条件编译命令 该命令的作用是对源程序代码有条件的进行编译。 格式一: #ifdef <标识符> <程序段1> #else <程序段2> #endif 格式二: #ifndef <标识符> <程序段1> #else <程序段2> #endif 格式三: #ifdef <常量表达式1> <程序段1> #else <程序段2> #endif 见书中例3.1。 3.1.3 宏定义命令  1.宏定义命令的格式 宏定义命令分为不带参数的宏定义命令和带参数的宏定义命令两种。 不带参数的宏定义命令格式如下: #define <标识符> <串> 带参数的宏定义命令格式如下: #define <宏名>(<参数表>)<宏体> 见书中例3.3。 2.使用宏定义命令时应注意的事项 ① 宏定义命令所定义的宏名的作用域是文件级的。取消宏定义命令undef <标识符>可以用来取消被定义的宏名。 ② 宏定义命令可以嵌套。 ③ 带参数的宏定义中,对于宏体中出现的参数应适当地加以括号很重要,这样可以避免因优先级引起的误解。 见书中例3.4。 3.2 表达式语句和复合语句  3.2.1 表达式语句和空语句  1.表达式语句 使用表达式在其后加一个分号(;),便组成了表达式语句。 表达式语句和表达式是有区别的。 2.空语句 空语句是只有一个分号(;),而无任何表达式的语句。空语句是一条最为简单的特殊语句。 3.2.2 复合语句和分程序  1.复合语句 复合语句是由两条或两条以上的语句用花括号({})括起来组成的。 2.分程序 分程序是一种含有说明语句的复合语句。 语句按其功能可分为说明语句和执行语句两大类。 函数体和分程序是不同的。 3.3 选择语句  3.3.1 条件语句  1.条件语句的格式 条件语句的格式如下: if(<条件1>) <语句1> else if(<条件2>) <语句2> else if(<条件3>) <语句3> … . else if(<条件n>) <语句n> else <语句n+1> 2.条件语句的功能 条件语句的功能描述如下。 先计算<条件1>给定的表达式的值。如果该值为非0时,则执行<语句1>,执行后转到该条件语句后面的语句;如果该值为0,则计算<条件2>给定的表达式的值。同样地,该值为非0,则执行<语句2>,执行后退出该条件语句。按上述方法处理。如果所有<条件>给出的表达式值都为0,则执行<条件n+1>,执行后退出if语句。 两路分支的条件语句格式如下: if(<条件>) <语句1> else <语句2> 最简单的条件语句格式如下: if(<条件>) <语句> 3.条件语句举例 见书中例3.6,倒3.7。 3.3.2 开关语句  1.开关语句的格式 开关语句格式如下: switch(<整型表达式>) { case <整常型表达式1>:<语句序列1> case <整常型表达式2>:<语句序列2> … case <整常型表达式n>:<语句序列n> default: <语句序列n+1> } 2.开关语句功能 开关语句功能描述如下: 先计算switch后面括号内的表达式的值,再将该值与花括号内case子句中的<整常型表达式>的值进行比较。先与<整常型表达式1>值比较,如果不相等,再与后边的<整常型表达式2>的值比较,如果还不相等,则依次进行比较,直到<整常型表达式n>都不相等,执行default后面的<语句序列n+1>,执行完毕后,退出该开关语句。在用<整型表达式>与<整常型表达式>比较中,一旦有相等时,则执行该<整常型表达式>后面对应的<语句序列>。在执行<语句序列>的各个语句时,遇到break语句时,则退出该开关语句。如果遇不到break语句时,则依次执行其后的<语句序列>,直到开关语句的右花括号,再退出该开关语句。 使用开关语句时,应注意如下事项。 ① 开关语句中case子句的表达式是整常型表达式。 ② 通常的<语句序列>中最后一条语句是break,表示退出该开关语句。 ③ 在开关语句中,default子句可以被省略,它也可以出现在花括号内的任意位置。 ④ 开关语句可以嵌套。 ⑤ 在开关语句的<语句序列>中,使用break语句是很重要的。 3.开关语句举例 见书中例3.8,例3.9,例3.10。 3.4 循环语句  3.4.1 while循环语句  1.while循环语句格式 while循环语句格式如下: while(<条件>) <语句> 2.while循环语句功能 该循环语句功能如下: 先计算<条件>给定的表达式的值,如果其值为非0时,执行循环体<语句>,再计算<条件>给定的表达式的值,如果其值还是非0时,再执行一次循环体<语句>,直到<条件>表达式的值为0时,退出该循环语句,执行其后面的语句。 使用while循环语句时应注意下述事项。 ① 执行while循环语句时,先计算<条件>给出的表达式的值。如果第一次计算的表达式值为0时,一次循环体也不执行。 ② 如果循环语句中给定的表达式值永远为非0时,而循环体内又无退出循环的语句,则为无限循环。 ③ 该循环语句可以嵌套。 3.while循环语句举例 见书中例3.11。 3.4.2 do-while循环语句  1.do-while循环语句格式 该循环语句格式如下: do <语句> while(<条件>); 2.do-while循环语句的功能 该循环语句功能如下: 先执行一次循环体<语句>,再计算<条件>中给定的表达式的值。如果该表达式的值为非0时,则再执行循环体,直到其值为0时,退出循环语句。 使用do-while循环语句时应注意如下事项。 ① 该循环语句的特点是无论<条件>如何,至少执行一次循环体<语句>。 ② 该循环语句可以用while循环语句表示,其格式如下: <语句> while(<条件>) <语句> ③ 该循环语句可以嵌套。 3.do-while循环语句举例 见书中例3.12。 3.4.3 for循环语句  1.for循环语句的格式 for循环语句格式如下: for(d1; d2; d3) <语句> 2.for循环语句的功能 for循环语句功能如下: 先计算表达式d1的值,再计算表达式d2的值,判断是否执行循环体。如果表达式d2值为0时,则退出该循环语句,执行该循环语句后面的语句;如果表达式d2的值为非0时,则执行循环体<语句>,再计算表达式d3,改变循环变量的值。接着,再计算表达式d2,然后判断是否执行循环体,重复前面操作。总之,每次计算的表达式d2的值不为0时,便执行循环体,只有d2的值为0时,才会退出该循环语句。 使用for循环语句应注意下述事项。 ① 该循环语句通常用于循环次数事先能够确定的情况。 ② 该循环语句可以用while循环语句表示如下: d1; while(d2) { <语句> d3; } ③ 该循环语句使用灵活,形式多样。 3.for循环语句应用举例 见书中3.13,例3.14。 3.4.4 多重循环  多重循环又称为循环嵌套,多重循环是指在某个循环语句的循环体内还可以包含有循环语句。 见书中例3.15,例3.16,例3.17。 3.5 转向语句  3.5.1 goto语句 该语句形式如下: goto <语句标号>; C++程序中限制goto语句的使用范围,规定该语句只能在一个函数体内转向,不允许从一个函数体转向到另一个函数体。 见书中例3.18。 3.5.2 break语句  该语句格式如下: break; break语句在C++程序仅可用于下述两种情况。 ① 用于开关语句的<语句序列>中,其功能是退出该开关语句。 ② 用于循环语句的循环体中,其功能是退出该重循环。 见书中例3.19。 3.5.3 continue语句  该语句格式如下: continue; 该语句只用于循环语句的循环体中,其功能是用来结束本次循环。 见本书例3.20。 作业题和上机练习题 第4章 函数和作用域  4.1 函数的定义和说明  4.1.1 函数的定义  1.函数的定义格式 C++语言中,函数的定义格式如下: <类型> <函数名> (<形参表>) { <函数体> } 其中,<类型>包含存储类和数据类型。存储类对函数来讲有两种:一种是外部函数,存储类说明符为extern,通常被缺省;另一种是内部函数,存储类说明符为static,该说明符不可省略。 下面列举几个简单函数的定义。
本文档为【吕凤翥C++语言基础教程(第2版)+课件材料】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_791536
暂无简介~
格式:doc
大小:922KB
软件:Word
页数:55
分类:其他高等教育
上传时间:2011-11-22
浏览量:99