Visual C++ 6.0 实用教程ppt课件

上传人:钟*** 文档编号:5820810 上传时间:2020-02-09 格式:PPT 页数:412 大小:3MB
返回 下载 相关 举报
Visual C++ 6.0 实用教程ppt课件_第1页
第1页 / 共412页
Visual C++ 6.0 实用教程ppt课件_第2页
第2页 / 共412页
Visual C++ 6.0 实用教程ppt课件_第3页
第3页 / 共412页
点击查看更多>>
资源描述
第1章VisualC 6 0开发环境 1 1开发环境概述1 2开发环境的菜单功能1 3开发环境的工具栏1 4项目和项目工作区1 5资源1 6一个控制台应用程序1 7程序调试上机训练 1 1开发环境概述 界面由标题栏 菜单栏 工具栏 项目工作区窗口 文档窗口 输出窗口以及状态栏等组成 如图 1 3开发环境的工具栏 1 3 1工具栏概述标准工具栏 1 3开发环境的工具栏 类向导工具栏小型编连工具栏 1 4项目和项目工作区 还有相应的Debug或Release Res等子文件夹 若创建的单文档应用程序项目名是Ex Sdi 则各文件的布局如图 VC应用程序向导创建项目时 系统会自动为项目创建Win32Debug的运行程序 并使用相应的缺省配置 和Win32Release版本的区别在于 Debug版本的运行程序有相应的调试信息码 Release版本的运行程序没有 但Release版本的运行程序经过代码的优化 其程序的运行速度被最大加速 注意 在开发环境中 VC是通过左边的项目工作区窗口来对项目进行各种管理 项目工作区窗口包含三个页面 是ClassView页 ResourceView页和FileView页 1 4项目和项目工作区 1 4 2ClassView用以显示项目中的所有的类信息 假设打开的项目名为Ex Sdi 单击项目区窗口底部的ClassView 则显示出 Ex Sdiclasses 的树状结点 在它的前面是一个图标和一个套在方框中的符号 单击符号 或双击图标 Ex Sdi中的所有类名将被显示 如CMainFrame CEx SdiApp CEx SdiDoc CEx SdiView等 如图所示 1 4项目和项目工作区 1 4 3ResourceView包含了项目中所有资源的层次列表 每一种资源都有自己使用的图标 1 4 4FileViewFileView可将项目中的所有文件分类显示 如图 每一类文件在FileView页面中都有自己的目录项 节点 可以在目录项中移动文件 还可以创建新的目录项以及将一些特殊类型的文件放在该目录项中 创建一个新目录项 可在添加目录项的地方右击 选择 NewFolder 如图 输入目录项名称和相关的文件扩展名 单击 OK 图1 22 NewFolder 对话框 1 5资源 1 5 1资源与资源标识资源的分类 1 快捷键列表 2 工具栏按钮 3 鼠标指针 4 对话框 5 HTML 6 图标 7 菜单 8 字符串列表 9 版本信息标识符标识符的命名规则 1 在标识符名称中允许使用字母a z A Z 0 9以及下划线 2 标识符名称不区分大小写字母 3 不能以数字开头 如8BIT是不合法的标识符名 4 字符个数不得超过247个 1 5资源 1 5 2资源基本操作创建资源 1 从 Insert 菜单选取 Resource 或用快捷键Ctrl R打开对话框 如图 New 用来创建一个由ResourceType列表中指定类型的新资源 Custom 按钮用来创建ResourceType列表中没有的新类型的资源 Import 按钮用于将外部已有的位图 图标 光标或其他定制的资源添加到当前应用程序中 2 从ResourceType列表中选择一种资源类型 而后按 New 按钮 3 在项目工作区窗口的ResourceView页面中 看到了刚才选中的资源的缺省标识符 而且相应的资源编辑器自动打开 图1 23 InsertResource 对话框 1 5资源 打开资源如果需要对已有资源进行查看或修改 可以首先切换到项目工作区窗口的ResourceView标签页 然后选中要打开的资源 双击鼠标左键或者按Enter键 这时相应的资源编辑器也会相应自动打开 删除 复制资源如果删除一个已有的资源 可以首先切换到项目工作区窗口的ResourceView标签页 然后选中要打开的资源 按Del键或者利用Edit菜单下的Delete菜单项可实现删除 复制资源的过程与删除类似 选中要打开的资源 按住Ctrl键不放 并拖动鼠标左键或利用Edit菜单中的Copy和Paste菜单命令进行操作 它同其他软件的复制过程相同 保存资源当设计或修改好一个资源后 用File菜单的Save菜单命令或利用快捷键Ctrl S将其保存在当前资源文件中 1 5资源 1 5 3资源文件的管理资源文件一经创建 其中所包含的资源也就随之而定 与资源相对应的标识符也被保存在Resource h头文件中 一般 在一个资源文件 RC中所保存的所有资源已经满足的需要了 尽管如此 VC仍然允许用多个文件来存放资源 用View菜单中的ResourceIncludes菜单命令打开 ResourceIncludes 对话框 如图1 24所示 时 可以看到Compile timedirectives编辑框中已经含有 include res Ex Sdi rc2 1 5 4资源编辑器所有Windows资源都可以用VC提供的资源编辑器来编辑 图1 24 ResourceIncludes 对话框 1 6一个控制台应用程序 1 6 1用AppWizard创建用AppWizard创建一个控制台应用程序可按下列步骤进行 1 选择 File New 菜单命令 显示出 New 对话框 2 选择Projects标签 选中Win32ConsoleApplication项 3 在ProjectName框中键入控制台应用程序项目名称 第一次使用时最好确定该项目所在的文件夹以便于源文件的管理 既可在Location下的编辑框中直接键入文件夹名称 也可单击Browse按钮择一个已有的文件夹 如图 图1 25在 New 对话框中建立Ex Hello控制台应用程序 1 6一个控制台应用程序 4 单击 OK 如图 选中Asimpleapplication项 5 单击 Finish 如图 单击 OK 按钮系统将自动创建此应用程序 1 6一个控制台应用程序 1 6 2理解程序框架在项目工作区窗口中只能看到ClassView和FileView标签 如图 切换到FileView页面 可以看到AppWizard为生成了Ex Hello cpp Stdafx cpp Stdafx h以及ReadMe txt四个文件 Stdafx cpp是一个只有一条语句的空文件 Stdafx h是VC为每个项目配置的用来预编译的文件 ReadMe txt是VC为每个项目配置的说明文件 包括对AppWizard产生文件类型的说明以及操作的一些技巧 Ex Hello cpp是AppWizard产生的 真正 具有实际意义的程序源代码文件 几乎所有的代码都是添加在这个文件中的 图1 28Ex Hello项目工作区内容 1 6一个控制台应用程序 1 6 3添加程序代码 1 单击项目工作区窗口的ClassView标签项 将显示Ex Hello类信息 2 单击各目录项前面的 号 将所有目录项展开 3 双击main函数名 在文档窗口中显示出main函数体所在的源文件Ex Hello cpp 且文本光标已移至此函数名的前面 4 键入下列代码 include 输入输出操作的头文件intmain intargc char argv cout Helloworld n return0 5 用SaveAll命令项或标准工具栏的SaveAll按钮将所有文件保存 1 6一个控制台应用程序 1 6 4编译运行打开Build菜单 选用BuildEx Hello exe菜单项或按快捷键F7 系统对Ex Hello进行编译 连接 同时在输出窗口中在线地显示出编译的内容 当出现Ex Hello exe 0error s 0warning s 字样时 表示Ex Hello exe可执行文件已经正确无误地生成了 在Build菜单中选取ExecuteEx Hello exe命令或按快捷键Ctrl F5 就可以运行刚刚生成的Ex Hello exe 如图 在Ex Hello窗口中 Pressanykeytocontinue 是系统自动加上去的 图1 29Ex Hello运行结果 1 7程序调试 1 7 1修正语法错误调试最初的任务主要是修正一些语法错误 这些错误包括 1 未定义或不合法的标识符 如函数名 变量名和类名等 2 数据类型或参数类型及个数不匹配 上述错误在编译后 会在Output窗口中列出所有错误项 若将光标移到Output窗口中的错误编号上 按F1键可启动MSDN并显示出错误的内容 从而帮助用户理解错误产生的原因 为了能使快速定位到错误产生的源代码位置 提供下列一些方法 1 在Output窗口中双击某个错误 或将光标移到该错误处按Enter键 则该错误被亮显 状态栏上显示出错误内容 并定位到相应的代码行中 且该代码行最前面有个蓝色箭头标志 2 按F4键可显示下一错误 并定位到相应的源代码行 3 在Output窗口中的某个错误项上 右击鼠标 在弹出的快捷菜单中选择 GoToError Tag 命令 语法错误被修正后 编译时会出现类似 Ex Hello exe 0error s 0warning s 的字样 并不是说 此项目完全没有错误 可能还有 异常 断言 等其他错误 而这些错误在编译时是不会显示出来的 只有当程序运行后才会出现 1 7程序调试 1 7 2设置断点调试的断点可以有下列类型 1 位置断点 2 数据断点 3 条件断点 快捷方式三种快捷方式可以设置位置断点 1 按快捷键F9 2 在Build工具栏上单击按钮 3 在需要设置断点的位置右击 选择 Insert RemoveBreakpoint 命令 1 7程序调试 使用Breakpoints对话框 1 凡是可以使用的断点前均有选中标记 若单击前面的复选框 则该断点被禁止 按钮 Remove 和 RemoveAll 清除当前选中的断点或全部断点 2 在Location页面中 BreakAt 文本框中可以输入断点的名称 单击 EditCode 可以查看断点位置处的源代码或目标代码 单击 Condition 可以输入程序运行中断所需要的表达式条件 从而设置一个条件断点 3 在Data页面中 提供了一种设置数据断点的方法 如图 在Data页面的最上面编译框中 可以键入任何有效的C C 表达式 它可以是赋值语句 可以是条件语句 可以是单独的一个变量名 在程序运行过程中 若变量的值有所改变 或者条件表达式变成真时 则程序在该断点处中断 图1 31 Breakpoints 对话框 图1 32Data页面 1 7程序调试 1 7 3启用调试器选择 Project 菜单 Settings 命令 如图 在调试程序时必须使用Debug版本 通过选择 Debuginfo 组合框来设置调试选项 含义如表 还可以在 ProjectSettings 对话框中的 Link 页面中 选中 Generatemapfile 项 使其在编连时产生相应的映射文件 选择 Build 菜单 StartDebug 子菜单的 Go StepInto 或 RunToCursor 命令 就可以启动调试器了 图1 33 ProjectSettings 对话框 1 7程序调试 1 7 4控制程序运行当程序开始运行在Debug状态下时 程序会由于断点而停顿下来 这时可以看到有一个小箭头 它指向即将执行的代码 而且 原来的 Build 菜单就会变成 Debug 菜单 如图1 34所示 其中有四条命令StepInto StepOver StepOut和RuntoCursor是用来控制程序运行的 其含义是 nStepOver的功能是运行当前箭头指向的代码 只运行一条代码 nStepInto的功能是如果当前箭头所指的代码是一个函数的调用 则用StepInto进入该函数进行单步执行 nStepOut的功能是如果当前箭头所指向的代码是在某一函数内 用它使程序运行至函数返回处 nRuntoCursor的功能是使程序运行至光标所指的代码处 1 7程序调试 1 7 5查看和修改变量的值调试器还提供一系列的窗口 用来显示各种不同的调试信息 可借助 View 菜单下的 DebugWindows 子菜单可以访问它们 当启动调试器后 VC的开发环境会自动显示出Watch和Variables两个调试窗口 且Output窗口自动切换到Debug页面 如图 图1 34Debug菜单 Watch窗口 Output窗口 Variables窗口 1 7程序调试 QuickWatch窗口的使用用来帮助用户快速查看或修改某个变量或表达式的值 若仅需要快速查看变量或表达式的值 则只需要将鼠标指针直接放在该变量或表达式上 片刻后 系统会自动弹出一个小窗口显示出该变量或表达式的值 启动调试器后 选择 Debug QuickWatch 或按快捷键Shift F9 如图 Expression框可以让用户键入变量名或表达式 而后按Enter键或单击 Recalculate 就可以在Currentvalue列表中显示出相应的值 若想要修改其值的大小 则可按Tab键或在列表项的 Value 域中双击该值 再输入新值按Enter键就可以了 单击 AddWatch 按钮可将刚才输入的变量名或表达式及其值显示在 Watch 窗口中 图1 36 QuickWatch 窗口 1 7程序调试 Watch窗口的使用选择 View DebugWindows Watch 四个页面 Watch1 Watch2 Watch3和Watch4 在每一个页面中有要查看的变量或表达式 可以将一组变量或表达式的值显示在同一个页面中 使用Watch窗口进行操作时 要注意到下面一些技巧 1 添加新的变量或表达式选定窗口中某个页面 在末尾的空框处 单击左边的 Name 域 输入变量或表达式 按Enter键 同时 又在末尾处出现新的空框 如图 在变量或表达式中右击 选择 Properties 查看其类型 2 修改变量或表达式的值选中相应的变量或表达式 按Tab键或在列表项的 Value 域中双击该值 再输入新值按Enter键就可以了 3 删除变量或表达式单击Del键可将当前选定的变量或表达式删除 1 7程序调试 Variables窗口的使用Variables窗口能快速访问程序当前的环境中所使用的重要变量 选择 View DebugWindows Variables 其中有三个页面 Auto页面显示出当前语句和上一条语句使用的变量 还显示使用StepOver或StepOut命令后函数的返回值 Locals页面显示出当前函数使用的局部变量 This页面显示出由This所指向的对象 Variables窗口还有一个 Context 框 从下拉列表中可以选定当前CallStack的指令 以确定在页面中显示变量的范围 如图 图1 38 Context 框 第2章基本C 语言 2 1C 程序结构2 2数据类型和基本输入输出2 3运算符和表达式2 4基本语句2 5函数和预处理2 6构造类型2 7指针和引用上机训练 2 1C 程序结构 2 1 1几个C 程序 例1 在屏幕上输出一个由星号形成的三角形 输出星号的三角形阵列 includevoidDoDraw intnum 声明一个全局函数voidmain intnum 5 定义并初始化变量DoDraw num 函数的调用 voidDoDraw intnum 函数的定义 for inti 0 i num i 循环语句 for intj 0 j i j cout cout n 2 1C 程序结构 例Ex Simple2 用类的概念重写例Ex Draw 输出星号的三角形阵列 includeclassCDrawArray 定义一个类 public voidDoDraw intnum 声明类的公有成员函数 voidCDrawArray DoDraw intnum 成员函数的实现 for inti 0 i num i for intj 0 j i j cout cout n voidmain intnum 5 CDrawArraymyDraw 定义类的一个对象myDraw DoDraw num 调用此对象的成员函数 2 1C 程序结构 2 1 2C 程序的基本组成C 程序往往由预处理命令 语句 函数 变量和对象 输入与输出以及注释等几个基本部分组成的 1 预处理命令在程序的一开始出现含有以 开头的命令 它们是预处理命令 三类预处理命令 宏定义命令 文件包含命令和条件编译命令 2 语句可以是用来判断的条件语句 可以是用来反复运行的循环语句等 3 函数一个程序由若干个函数组成 有的是系统中所提供的库函数 有的是根据自己需要自己编制设计的函数 程序中必须有一个且只能有一个主函数main 4 变量和对象变量的类型有整型 int 字符型 char 以及浮点型 float 等 对象通常是指 类 的实例 具有该 类 类型的变量 如myDraw是类CDrawArray的对象 5 输入与输出使用输入与输出可以要求键入一些数值或把计算的结果显示在屏幕上 6 注释程序的目的不仅在于实现某种功能 解决某个问题 而且还在于数据结构和算法的交流 注释能提高程序的可读性 帮助用户对程序的理解 2 1C 程序结构 2 1 3C 程序的书写风格标识符命名用来标识变量名 函数名 数组名 类名 对象名 类型名 文件名等的有效字符序列 标识符命名的好坏也会影响程序的可读性 命名时注意 1 合法性标识符由大小写字母 数字字符 0 9 和下划线组成 第一个字符必须为字母或下划线 任何标识符中都不能有空格 标点符号及其他字符 注意 标识符的大小写是有区别的 用户定义的标识符不能和系统的关键字同名 2 有效性标识符的长度 组成标识符的字符个数 是任意的 最好不超过32个 因为有的编译系统只能识别前32个字符 也就是说前32个字符相同的两个不同标识符被有的系统认为是同一个标识符 3 易读性在定义标识符时 若能做到 见名知意 就可以达到易读性的目的 2 1C 程序结构 缩进和注释缩进是指程序在书写时不要将程序的每一行都由第一列开始 在适当的地方加进一些空行或空格 它同注释一样 也是为了提高程序的可读性 注释要注意的是 1 注释应在编程的过程中同时进行 不要指望程序开发完成后再补写注释 那样只会多花好几倍的时间 更为严重的是 时间长了以后甚至会读不懂自己写的程序 2 必要的注释内容应包含 源程序的总体注释 文件名 作用 创建时间 版本 作者及引用的手册 运行环境等 函数注释 目的 算法 使用的参数和返回值的含义 对环境的一些假设等 及其他的少量注释 千万不要陈述那些一目了然的内容 否则会使注释的效果适得其反 2 2数据类型和基本输入输出 2 2 1基本数据类型使用基本数据类型时需要注意 1 无符号和有符号的区别在于数值最高位的含义 对signed类型 最高位是符号位 其余各位表示数值大小 unsigned类型的各个位都用来表示数值大小 相同基本数据类型的signed和unsigned的数值范围是不同 2 char short int和long可统称为整型 缺省时 char short int和long本身是有符号 signed 的 2 2数据类型和基本输入输出 2 2 2常量整型常量 1 十进制整型常量 即十进制整数 如34 128等 2 八进制整型常量 以0开头的数 由0至7的数字组成 3 十六进制整型常量 以0 x或0X开头的数 由0至9 A至F或a至f组成 需要注意的是 整型常量中的长整型 long 要以L或小写字母l作为结尾 整型常量中的无符号型 unsigned 要以U或u作为结尾 浮点型常量 1 十进制数形式 由整数部分和小数部分组成 2 指数形式 采用科学表示法 能表示出很大或很小的浮点数 若浮点型常量是以F 或f 结尾的 则表示单精度类型 float 以L 或小写字母l 结尾的 表示长双精度类型 longdouble 若一个浮点型常量没有任何说明 表示双精度类型 double 2 2数据类型和基本输入输出 字符常量字符常量是用单引号括起来的一个字符 2 2数据类型和基本输入输出 字符串常量字符串常量是一对双引号括起来的字符序列 可以包含空格 转义序列符或其他字符 由于双引号是字符串的分界符 因此如果需要在字符串中出现双引号则必须用 表示 例如 Pleasepress F1 tohelp 这个字符串被解释为 Pleasepress F1 tohelp 字符串常量必须在同一行书写 若一行写不下 则需要用 来连接 不要将字符常量和字符串常量混淆不清 它们主要的区别如下 1 字符常量用单引号括起来 占一个字节 字符串常量是用双引号括起来 至少占用两个字节 例如 a 是字符常量 占有的一个字节用来存放字符a的ASCII码值 而 a 是字符串常量 它的长度不是1而是2 除了字符a之外 它的末尾还有个 0 字符 每个字符串的末尾都有一个这样的字符 2 字符常量实际上是整型常量的特殊形式 它可以参与常用的算术运算 而字符串常量则不能 例如 intb a 3 结果b为100 这是因为将 a 的ASCII码值97参与运算 2 2数据类型和基本输入输出 符号常量 例Ex PI1 用 define定义符号常量 include definePI3 14159voidmain doubler 100 0 area area PI r r cout 圆的面积是 area n 2 2数据类型和基本输入输出 2 2 3变量变量的定义定义变量是用下面的格式语句进行定义的 需要说明的是 1 在同一个程序块中 不能有两个相同的变量名 2 没有字符串变量类型 字符串是用字符类型的数组或指针来定义的 3 与其他语言相比 C 变量的定义比较自由 变量的初始化程序中常需要对一些变量预先设置初值 这一过程称为初始化 可以在定义变量时同时使变量初始化 也可以在多个变量的定义语句中单独对某个变量初始化 需要注意的是 一个未初始化的变量不是没有数值 而是取决于变量在系统中的存储形式 它可能是系统的缺省值或无效值 2 2数据类型和基本输入输出 2 2 4基本输入输出输出流 cout 通过cout可以输出一个整数 实数 字符及字符串 cout中的插入符 其中 提取符 可以连续写多个 每个后面跟一个表达式 该表达式通常是获得输入值的变量或对象 2 3运算符和表达式 2 3 1算术运算符算术运算符如下所示 正号运算符 如 4 1 23等 负号运算符 如 4 1 23等 乘法运算符 如6 8 1 4 3 56等 除法运算符 如6 8 1 4 3 56等 模运算符或求余运算符 如40 11等 加法运算符 如6 8 1 4 3 56等 减法运算符 如6 8 1 4 3 56等 注意 1 除法运算两个整数相除 结果为整数 如7 5的结果为1 它是将小数部分去掉 而不是四舍五入 若除数和被除数中有一个是浮点数 则进行浮点数除法 结果是浮点型 如7 5 0 7 0 5 7 0 5 0的结果都是1 4 2 求余运算求余运算要求参与运算的两个操作数都是整型 结果是两个数相除的余数 例如40 5的结果是0 40 11的结果是7 要理解负值的求余运算 例如40 11结果是7 40 11结果是 7 40 11结果也是 7 2 3运算符和表达式 3 优先级和结合性将表达式的求值中多种运算之间的先后关系 即运算符之间的优先关系 用运算符的优先级表示 优先级的数值越小优先级越高 在算术运算符中 单目运算符的优先级最高 其次是乘 除和求余 最后是加减 优先级相同的运算符 则按它们的结合性进行处理 运算符的结合性是指运算符和操作数的结合方式 有 从左至右 和 从右至左 从左至右的结合 指运算符左边的操作数先与运算符相结合 再与运算符右边的操作数进行运算 自右至左的结合次序是将运算符右边的操作数先与运算符相结合 在算术运算符中 除单目运算符外 其余运算符的结合性都是从左至右的 4 关于书写格式在使用运算符进行数值运算时 若书写时没有在双目运算符两边加上空格 则有时编译系统会做出与自己想象中不同的理解 书写时 有时有意识地加上一些括号 这样不仅增强程序的可读性 而且 尤其当对优先关系犹豫时 加上括号是保证正确结果的最好方法 5 溢出处理某数除以0或当其它浮点溢出时 编译系统将报告错误并终止程序运行 但对整数溢出 系统却不认为是一个错误 2 3运算符和表达式 2 3 2赋值运算符复合赋值10种复合赋值运算符 注意 1 在复合赋值运算符之间不能有空格 例如 不能写成 2 所有运算符高于逗号运算符 复合赋值运算符的结合性是从右至左的 多重赋值指在一个赋值表达式中出现两个或更多的赋值符 例如 nNum1 nNum2 nNum3 100 赋值符的结合性是从右至左 上述赋值的过程 首先对nNum3 100求值 将100赋值给nNum3 同时该赋值表达式取得值100 然后将该值赋给nNum2 该赋值表达式也取得值100 最后将100赋给nNum1 2 3运算符和表达式 2 3 3数据类型转换自动转换将数据类型从低到高进行转换 例如 10 a 2 1 25 5 0 4L运算 1 2 1 25的运算 将2和1 25都转换成double型 结果为double型的2 5 2 长整型4L和5 0转换成double型 5 0 4L结果为double型 值为1 25 3 进行10 a 的运算 先将 a 转换成整数97 运算结果为107 4 整数107和2 5相加 先将整数107转换成double型 值为109 5 5 进行109 5 1 25的运算 结果为double型的108 25 强制转换强制类型有下列两种格式 2 3运算符和表达式 2 3 4关系运算符是比较两个操作数是否符合给定的条件 若符合条件 则关系表达式的值为 真 否则为 假 在编译系统中 往往将 真 表示为 true 或1 将 假 表示为 false 或0 而任何不为0的数被认为是 真 0被认为是 假 由于关系运算需要两个操作数 所以关系运算符都是双目运算符 提供了6种关系运算符 大于 大于等于 相等于 不等于 其中 前4种的优先级相同且高于后面的两种 例如 a b c等效于a b c 但关系运算符的优先级低于算术运算符 其他可参见表2 6 例如 a b c等效于a b c 2 3运算符和表达式 2 3 5逻辑运算符将多个关系表达式或逻辑量组成一个逻辑表达式 提供了3种逻辑运算符 逻辑非 单目 指将 真 变 假 假 变 真 逻辑与 双目 指两个操作数都是 真 时 结果为 真 否则为 假 逻辑或 双目 指两个操作数中有一个是 真 时 结果为 真 只有它们都为 假 时 结果才为 假 逻辑非 逻辑与 和 逻辑或 的优先级依次从高到低 且 逻辑非 的优先级还比算术运算符和关系运算符高 而 逻辑与 和 逻辑或 的优先级却比关系运算符要低 例如 0 2 4 0表达式的运算过程是这样的 1 进行 0 的运算 结果为1 真 2 进行 8 4 1 的运算 即 8 3 结果为0 假 3 进行 0 0 的运算 结果为0 假 表达式的值为0 2 3运算符和表达式 2 3 6位运算符是对操作数按其在计算机内表示的二制数逐位地进行逻辑运算或移位运算 参与运算的操作数只能是整型常量或变量 提供了六种位运算符 按位求反 单目运算符 将一个二进制数的每一位求反 即0变成1 1变成0 右移 双目运算符 将左操作数的二进制值向右移动指定的位数 右移后 移出的低位舍弃 无符号数高位补0 有符号数高位补符号位 按位与 双目运算符 将两个操作数对应的二进制位进行逻辑与操作 按位异或 双目运算符 将两个操作数对应的二进制位进行异或操作 按位或 双目运算符 将两个操作数对应的二进制位进行逻辑或操作 说明 1 左移和右移运算可替代乘和除以2的n次方运算 n为移位的位数 2 当多个位运算符出现在同一个表达式中时 要注意它们的优先级别 2 3运算符和表达式 2 3 7三目运算符C 中唯一的三目运算符是条件运算符 其格式如下 条件表达式 是C 中可以产生 真 和 假 结果的任何表达式 如果条件表达式的结果为 真 则执行表达式1 否则执行表达式2 例如 nNum a b 10 8 注意 只有在表达式2后面才能出现分号结束符 表达式1 和 表达式2 中都不能有分号 2 3运算符和表达式 2 3 8增1和减1运算符 和 既可放在变量的左边也可以出现在变量的右边 称为前缀运算符和后缀运算符 例如 i 或 i 等效于i i 1 或i 1 i 或 i 等效于i i 1 或i 1 若前缀运算符和后缀运算符仅用于某个变量的增1和减1 这两都是等价的 如果将这两个运算符和其他的运算符组合在一起 在求值次序上就会产生根本的不同 如果用前缀运算符对一个变量增1 减1 在将该变量增1 减1 后 用新的值在表达式中进行其他的运算 如果用后缀运算符对一个变量增1 减1 用该变量的原值在表达式进行其他的运算后 再将该变量增1 减1 例如 a 5 b a 1 相当于a a 1 b a 1 和a 5 b a 1 相当于b a 1 a a 1 虽然它们中的a值的结果都是6 但b的结果却不一样 前者为5 后者为4 2 4基本语句 2 4 2选择语句条件语句条件语句if具有下列形式 if else 1 条件语句中的表达式一般为逻辑表达式或关系表达式 表达式的类型也可以是任意的数值类型 包括整型 浮点型 字符型等 2 适当添加花括号 来增加程序的可读性 3 条件语句中的语句1和语句2也可是if条件语句 这就形成了if语句的嵌套 4 else总是和其前面最近的if配套的 2 4基本语句 开关语句具有下列形式 switch case 语句1 case 语句2 case 语句n default 语句n 1 注意 1 switch后面的表达式可以是整型 字符型或枚举型的表达式 而case后面的常量表达式的类型必须与其匹配 2 多个case可以共有一组执行语句 3 若同一个case后面的语句是复合语句 即有两条或两条以上的语句 则这些语句可以不用花括号 括起来 4 由于case语句起标号作用 因此每一个case常量表达式的值必须互不相同 否则会出现编译错误 2 4基本语句 2 4 3循环语句while循环语句while循环语句具有下列形式 while do while循环语句do while循环语句具有下列形式 dowhile for循环语句for循环语句具有下列形式 for 表达式1 表达式2 表达式3 1 表达式1 表达式2 表达式3都可以省略 但分号 不能省略 2 表达式1和表达3可以是一个简单的表达式 也可以是逗号表达式 即包含两个或两个以上的简单表达式 中间用逗号分隔 3 由于循环体是由任何类型的语句组成的 因此在循环体内还可以包含前面的几种循环语句 这样就形成了循环的嵌套 2 4基本语句 2 4 4break和continue语句若需跳出循环结构或重新开始循环 就得使用break和continue语句 格式 break 从一个循环体跳出 即提前终止循环 也可以跳出switch结构 continue 用于那些依靠条件判断而进行循环的循环语句 对于for语句来说 目的是将流程转到for语句的表达2和表达式3 例如 例Ex Continue 把1 100之间的不能被7整除的数输出 includevoidmain for intnNum 1 nNum 100 nNum if nNum 7 0 continue cout nNum cout n 当nNum能被7整除时 执行continue语句 流程转到for语句中的nNum 100 nNum 并根据表达式nNum 100的值来决定是否再做循环 而当nNum不能被7整除时 才执行cout nNum 语句 2 5函数和预处理 2 5 1函数的定义和调用函数的定义定义一个函数的格式如下 函数体 函数类型决定了函数所需要的返回值类型 函数名后面必须跟一对圆括号 以区别于变量名及其他用户定义的标识名 函数的形式参数写在括号内 参数表中参数个数可以是0 一个或多个参数 圆括号不能省略 函数体由在一对花括号中的若干条语句组成 用于实现这个函数执行的动作 函数的声明声明一个函数可按下列格式进行 intsum intx inty 和intsum int int 是等价的 2 5函数和预处理 函数的调用函数调用的一般形式为 所谓 实际参数 简称 实参 它与 形参 相对应 是实际调用函数时所给定的常量 变量或表达式 且必须有确定的值 例如 inta 5 7 9 6 3 4 sum a 0 6 或sum a 0 a 1 a 2 a 3 等都是合法的调用 需要注意的是 实参与形参的个数应相等 类型应一致 且按顺序对应 一一传递数据 C 中 调用一个函数的方式可以有很多 例如 sum 3 4 Aintc 2 sum 4 5 Bc sum c sum c 4 C其中 A是将函数作为一个语句 不使用返回值 只要求函数完成一定的操作 B把函数作为表达式的一部分 将返回值参与运算 结果c 18 C是将函数作为函数的实参 等价于 c sum 18 sum 18 4 执行sum 18 4 后 等价于 c sum 18 22 最后结果为c 40 2 5函数和预处理 2 5 2函数的参数传递函数的参数传递有两种方式 一种是按值传递 另一种是地址传递或引用传递 例Ex SwapValue 交换函数两个参数的值 includevoidswap floatx floaty floattemp temp x x y y temp cout x x y y n voidmain floata 20 b 40 cout a a b b n swap a b cout a a b b n 运行结果为 a 20 b 40 x 40 y 20a 20 b 40值传递的最大好处是保持函数的独立性 在值传递的情况下 函数只有通过return来返回某个类型的值 2 5函数和预处理 2 5 3作用域和存储类型作用域 1 块作用域在块中声明的标识符 作用域从声明处开始 一直到结束块的花括号为止 具有块作用域的标识符称作局部标识符 块作用域也称作局部作用域标识符的作用域完全相同时 不允许出现相同的标识符名 标识符具有不同的作用域时 允许标识符同名 在for语句中声明的标识符 其作用域是包含for语句的那个内层块 而不是仅仅作用于for语句 2 函数原型作用域在声明函数原型所指定的参数标识符的作用范围 这个作用范围是在函数原型声明中的左 右括号之间 在函数原型中声明的标识符可以与函数定义中说明的标识符名称不同 由于所声明的标识符与该函数的定义及调用无关 所以可以在函数原型声明中只作参数的类型声明 而省略参数名 3 函数作用域C 语言中 只有goto语句中的标号标识符具有函数作用域 具有函数作用域的标识符在声明它的函数内随处可见 但在此函数之外不可见 goto语句的滥用导致程序流程无规则 可读性差 2 5函数和预处理 变量的存储类型存储类型的声明格式 1 自动类型 auto 一般说 自动存储类型声明的变量都是限制在某个程序范围内使用的 从系统角度来说 自动存储类型变量是采用堆栈方式分配内存空间 程序执行到超出该变量的作用域时 就释放它所占用的内存空间 其值也随之消失了 声明一个自动存储类型的变量是在变量类型前面加上关键字auto若自动存储类型的变量是在函数内或语句块中声明 可省略auto 2 静态类型 static 它和自动存储类型的变量的最大不同之处在于 静态类型变量在内存中是以固定地址存放的 而不是以堆栈方式存放的 只要程序还在继续执行 静态类型变量的值就一直有效 不会随它所在的函数或语句块的结束而消失 静态类型的变量均有确定的初值 当声明变量时没有指定其初值 则编译器将其初值置为0 在程序中声明的全局变量总是静态存储类型 若在全局变量前加一个static 使该变量只在这个源程序文件内使用 称之为全局静态变量或静态全局变量 静态函数也是在某个函数声明前加上static 它的目的也是使该函数只在声明的源文件中使用 对于其他源文件则无效 2 5函数和预处理 3 寄存器类型 register 使用关键字register声明寄存器类型的变量的目的是将所声明的变量放入寄存器内 从而加快程序的运行速度 但有时 在使用这种声明时 若系统寄存器已经被其他数据占据时 寄存器类型的变量就会自动当作auto变量 4 外部类型 extern 用关键字extern声明的变量称为外部变量 某个变量被声明成外部变量时 不必再次为它分配内存就可以在本程序中引用这个变量 只有在两种情况下要使用外部变量 第一种情况 在同一个源文件中 若定义的变量使用在前 声明在后 这时在使用前要声明为外部变量 第二种情况 当由多个文件组成一个完整的程序时 在一个源程序文件中完全定义的变量要被其他若干个源文件引用时 引用的文件中要使用extern声明外部变量 2 5函数和预处理 2 5 4函数的重载函数重载是指C 允许多个同名的函数存在 但同名的各个函数的形参必须有区别 形参的个数不同 或者形参的个数相同 但参数类型有所不同 需要说明的是 1 重载函数必须具有不同的参数个数或不同的参数类型 若只有返回值的类型不同是不行的 2 当函数的重载带有默认参数时 应该注意避免二义性 例如 intfun inta intb 0 intfun inta 是错误的 因为如果有函数调用fun 2 时 编译器无法准确地确定应调用哪个函数 2 5函数和预处理 2 5 3预处理宏定义命令 definePI3 141593 1 define PI和3 141593之间一定要有空格 且一般将宏名定义成大写 以与普通标识符相区别 2 宏被定义后 一般不能再重新定义 而只有当使用如下命令才可以 undef宏名 3 一个定义过的宏名可以用来定义其它新的宏 但要注意其中的括号 4 上述宏定义是简单的一种形式 实际上它还可以带参数 例如 defineMAX a b a b a b 文件包含命令有下列两种格式 include include 文件名 在使用 include命令需要注意的是 一条 include命令只能包含一个文件 若想包含多个文件须用多条文件包含命令 2 5函数和预处理 条件编译命令 1 第一种形式 ifdef else endif 例Ex UseIfdef 使用 ifdef条件编译命令 include defineA 1voidmain ifA 0cout0 n elifA 0cout a 0 n elsecout a 0 n endif 运行结果 a 0 2 5函数和预处理 2 第二种形式 ifndef else endif这与前一种形式的区别仅在于 如果标识符没有被 define命令定义过 则编译 否则就编译 3 第三种形式 if elif else endif 2 5函数和预处理 例Ex UseIf 使用 if条件编译命令 include defineA 1voidmain ifA 0cout0 n elifA 0cout a 0 n elsecout a 0 n endif 运行结果为 a 0若将 defineA 1改为 defineA0则结果为 a 0 2 6构造类型 2 6 3结构体定义结构体结构体定义的格式为 struct 结构变量名表 注意 1 在定义结构体时 不要忘记最后一个花括号后面的分号 2 结构体的成员变量可以是基本数据类型 也可以是其他合法的类型 例如 structSTUDENT PERSONone 用已定义的结构体类型声明成员floateng phy math poli 英语 物理 数学和政治的成绩 2 6构造类型 结构体变量的初始化和引用结构体变量的初始化的一般形式是在变量后面加上 当一个结构体变量定义之后 就可引用这个变量 使用时 遵循下列规则 1 只能引用结构体变量中的成员变量 并使用下列格式 2 若成员本身又是一个结构体变量 引用时需要用多个成员运算符一级一级地找到最低一级的成员 3 结构类型相同的变量之间可以直接赋值 这种赋值等效于各个成员的依次赋值 例如 structPERSON intage 年龄charname 25 姓名 PERSONone 30 LiMing PERSONanother one cout another name n 输出 LiMing 其中 another one等效于 another age one age strcpy another name one name 2 6构造类型 2 6 4传递结构体参数 例Ex StructValue 将结构体的值作为参数传给函数 includestructPERSON intage 年龄floatweight 体重charname 25 姓名 voidprint PERSONone cout one name one age one weight n PERSONall 4 20 60 Zhang 28 50 Fang 33 78 Ding 19 65 Chen voidmain for inti 0 i 4 i print all i 运行结果为 Zhang2060Fang2850Ding3378Chen1965 2 7指针和引用 2 7 1指针和指针变量程序中定义了一个变量 编译时系统会给这个变量分配内存单元 根据程序中定义的变量类型 分配一定长度的内存空间 每个内存单元中存放着变量的值 系统为每一个内存单元分配一个地址 这个 地址 称为 指针 指针变量 pointer 是存放内存地址的变量 一般情况下该地址是另一个变量存储在内存中的首地址 又称该指针变量 指向 这个变量 一旦一个变量初始化后 该变量在内存中的地址也就确定下来 不管以后对该变量如何赋值 在程序运行期间 其内存地址总是固定不变的 指针变量遵循先定义后使用的规则 定义一个指针变量格式 式中的 是一个定义指针变量的说明符 它不是指定变量名的一部分 每个指针变量前面都需要这样的 来标明 例如 int pInt1 pInt2 pInt1 pInt2是指向整型变量的指针float pFloat pFloat是一个指向浮点型变量的指针char pChar pChar是一个指向字符型变量的指针 它通常用来处理字符串定义一个指针后 系统会给指针分配一个内存单元 但分配的空间大小是相同的 因为指针变量的数值是某个变量的地址 而地址值的长度是一样的 2 7指针和引用 2 7 2 尽管本身的赋值没有错误 但结果是不可预测的 因为 pi 的值不会等于1 23 也不会等于1 4 给指针变量赋值实际上是 间接 地给指针所指向的变量赋值 2 7指针和引用 例Ex CompUsePointer 输入a和b两个整数 按大小顺序输出 includevoidmain int p1 p2 p a b cout a b p1 运行情况如下 输入两个整数 1128 a 11 b 28最大的值是 28 最小的值是 11 2 7指针和引用 2 7 3指针和数组数组中所有元素都是依次存储在内存单元中的 每个元素都有相应的地址 规定数组名代表数组中第一个元素的地址 例如 当有下列的数组定义时 inta 5 则a所表示的地址就是元素a 0 的地址 指针操作中 若定义了下列指针 int pi 则pi 是等价的 因为C 规定 pi 1是下一个数组元素地址 这里是元素a 1 的地址 而pi i就是元素a i 的地址 指向数组的指针变量实际上也可像数组变量那样使用下标 而数组变量又可像指针变量那样使用指针 例如 pi i 与 pi i 及a i 是等价的 a i 与 pi i 是等价的 第3章C 面向对象程序设计 3 1类和对象3 2继承和派生类3 3多态和虚函数3 5输入输出流库 3 1类和对象 3 1 1类的定义定义类的一般格式如下 class private public 类中的数据和函数是类的成员 分别称为数据成员和成员函数 public类成员 是公有的 能被外面的程序访问 private类成员 是私有的 只能由类中的函数所使用 而不能被外面的程序所访问 是类定义中的实现部分 这部分包含所有在类体中声明的函数的定义 当类的成员函数的函数体在类的外部定义时 必须由作用域运算符 来通知编译系统该函数所属的类 例 includeclasspoint intx inty voidoutput cout x endl y endl voidmain pointpt pt x 0 pt y 0 pt output 例 includeclasspoint public intx inty point x 0 y 0 point inta intb x a y b voidoutput cout x endl y endl voidmain pointpt 5 5 pt output 3 1类和对象 定义类时应注意 1 不允许对所定义的数据成员进行初始化 例如类CMeter中 下面的定义是错误的 classCMeter private intm nPos 10 2 在 public 或 private 后面定义的所有成员都是公有或私有的 直到下一个 public 或 private 出现为止 3 关键字public和private可以在类中出现多次 且前后的顺序没有关系 4 关键字protected 保护 也可修饰成员的类型 它与private两者基本相似 但在类的继承时有所不同 5 数据成员的类型可以是整型 浮点型 字符型 数组 指针和引用等 也可以是另一个类的对象 6 尽量将类单独存放在一个文件中或将类的声明放在 h文件中而将成员函数的实现放在与 h文件同名的 cpp文件中 3 1类和对象 3 1 2对象的定义定义对象 格式 定义的对象既可是一个普通对象 也可是一个数组对象或指针对象 对象的成员就是该对象的类所定义的成员 对象成员有数据成员和成员函数 其表示方式如下 前者用来表示数据成员 后者用来表示成员函数 是一个运算符 用来表示对象的成员 指向对象的指针的成员表示如下 与 运算符的区别是 用来表示指向对象的指针成员 用来表示一般对象成员 前者表示数据成员 后者表示成员函数 下面的两种表示是等价的 这对于成员函数也适用 另外 引用对象的成员表示与一般对象的成员表示相同 3 1类和对象 3 1 3构造函数和析构函数构造函数为了能给数据成员自动设置某些初始值 就要使用类的特殊成员函数 构造函数 构造函数的最大特点是在对象建立时它会被自动执行 用于变量 对象的初始化代码一般放在构造函数中 构造函数必须与相应的类同名 可以带参数 也可以不带参数 可以重载 例如 classCMeter public CMeter intnPos 10 构造函数 m nPos nPos 构造函数CMeter intnPos 10 中 nPos被设置了10 构造函数中相应实参没有被指定时 使用此缺省值 由于构造函数的参数只能在定义对象时指定 CMeteroMeter 和CMeteroMeter 10 3 1类和对象 析构函数与构造函数相对应的是析构函数 析构函数是另一种特殊的C 成员函数 它只是在类名称前面加上一个 符号 每一个类只有一个析构函数 没有任何参数 也不返回任何值 例如 classCMeter public CMeter 析构函数 析构函数一般在下列两种情况下被自动调用 1 当对象定义在一个函数体中 函数调用结束后 析构函数被自动调用 2 new为对象分配动态内存 用delete释放对象时 析构函数被自动调用 3 1类和对象 默认构造函数和析构函数类定义时 如果没有定义任何构造函数 编译器自动生成一个不带参数的默认构造函数 格式如下 按构造函数的规定 默认构造函数名同类名 默认构造函数的这样格式也可由用户定义在类体中 在程序中定义一个对象而没有指明初始化时 则编译器便按默认构造函数来初始化该对象 默认构造函数对对象初始化时 则将对象的所有数据成员都初始化为零或空 如果一
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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