VC++6.0_MFC_入门到实践_第1页
VC++6.0_MFC_入门到实践_第2页
VC++6.0_MFC_入门到实践_第3页
VC++6.0_MFC_入门到实践_第4页
VC++6.0_MFC_入门到实践_第5页
已阅读5页,还剩457页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章VisualC 6 0集成开发环境概述 VisualC 6 0是微软推出的一个功能强大的可视化集成开发环境 它提供了软件代码自动生成和可视化的资源编辑功能 VisualC 6 0提供了功能强大的向导工具 包括MFCAppWizard ClassWizard和MFCActiveXControlWizard等 VisualC 6 0同时提供了对数据库开发和Internet的强大支持 本章讲解的知识点包括 VisualC 概述 VisualC 6 0集成开发环境介绍 VisualC 6 0界面概览 VisualC 6 0开发步骤与环境设定 1 1VisualC 概述 VisualC 是一个功能强大的可视化软件开发工具 VisualC 6 0不仅是一个C 编译器 而且是一个基于Windows操作系统的可视化集成开发环境 VisualC 大概可以分成三个主要的部分 C 编译环境 微软基础类库和SDKPlatform 1 1 1VisualC 的语言基础 C 语言 C 是美国贝尔实验室的BjarneStroustrup博士在C语言的基础上 弥补了C语言存在的一些缺陷 增加了面向对象的特征 而开发出来的一种面向对象和过程性的程序设计语言 VisualC 作为一款优秀的C C 语言的编译工具 Microsoft公司于1993年推出VisualC 1 0 随后VisualC 版本不断升级 但其中以VisualC 6 0拥有较多的用户 虽然已经推出了更新的版本 但VisualC 6 0更有较大的市场 1 1 2VisualC 的接口函数 WindowsAPI WindowsAPI ApplicationProgrammingInterface 应用程序编程接口 是一套用来控制整个Windows系统的接口函数库 Windows拥有多达成百的API函数 在Windows中 无论是进行任何的操作 系统都会利用这些函数来进行一定的控制 例如单击鼠标时 系统就会从硬件得到消息 然后在软件上利用API函数进行鼠标单击消息的发送 接收 进而产生一定的动作 1 1 3VisualC 的类库 MFC Microsoft基础类库 MicrosoftFoundationClassLibrary MFC 的本质是一个包含了许多已经定义好了的类的类库 MFC是微软提供的 封装了大量WindowsAPI的C 类库 它基本封装了Windows的所有API函数 因此 利用MFC建立应用程序更加符合面向对象的思想 同时利用向导所建立的应用程序隐藏了程序设计的很多细节 如消息的管理 设备环境绘图 1 2VisualC 6 0集成开发环境概述 VisualC 自诞生以来 一直是Windows下最主要的开发工具之一 利用VisualC 开发环境可以完成各种各样的应用程序的开发 从软件的底层到软件的界面设计 VisualC 都提供了强大的支持 而且 VisualC 强大的调试功能也为大型复杂软件的开发提供了有利的保障 近年来多媒体技术的快速发展 可视化程序设计越来越得到重视 而VisualC 6 0最为一款最优秀的可视化开发环境得到程序员的喜爱 友好的编程界面 强大的向导功能 微软公司的大力支持使VisualC 成为当今软件开发最优秀的工具之一 1 2 1VisualC 6 0的安装 VisualC 6 0作为VisualStdio的主打产品 读者可购买整个VisualStdio光盘进行VisualStdio整个软件开发家族的安装 当然读者也可以在安装时自定义选择性安装 例如读者可以只选择安装VisualC 6 0 1 2 2开发环境窗口介绍 当成功安装了VisualC 6 0以后 会在桌面上自动生成一个应用程序图标 双击该图标后可以进入VisualC 6 0的主界面 此时由于没有任何工程是活动的 整个界面是灰色的 当进入VisualC 6 0并利用向导工具创建一个基于MFCAppWizard exe 的名字为test的项目文件后 显示窗口如图1 9所示 1 3VisualC 6 0界面概览 VisualC 6 0是一款优秀的开发工具 本节详细介绍VisualC 6 0开发环境的的布局 以及开发环境的使用 1 3 1VisualC 6 0开发环境布局 双击桌面上的 MicrosoftVisualC 6 0 图标 VisualC 6 0启动后 生成项目后的开发环境的具体布局如图1 10所示 1 3 2VisualC 6 0菜单介绍 进行程序设计之前 首先介绍各个菜单命令的基本功能 程序员大部分操作是通过菜单来进行的 同时VisualC 6 0提供了多个快捷菜单 在开发环境的各个工作区右击即可弹出相应的快捷菜单 在此不再介绍 下面对主窗口的菜单及其功能进行介绍 1 File菜单2 Edit菜单3 View菜单4 Insert菜单5 Project菜单6 Build菜单7 Tools菜单 1 3 3VisualC 6 0工具栏介绍 工具栏是一种图形化的操作界面 熟练掌握工具栏的使用可以提高编程效率 工具栏包括一些操作按钮 分别对应一些命令 可以单击按钮进行操作 VisualC 6 0包含有很多工具栏 可以通过 Tools 菜单进行定制 也可以在菜单栏或工具栏上右击 在弹出的快捷菜单中定制工具栏 常用的工具栏包括 Standard 和 BuildMiniBar 如图1 13所示 1 3 4VisualC 6 0控件面板介绍 项目工作区包括 ClassView ResourseView 和 FileView 三个面板 下面对三个面板进行具体介绍 1 ClassView面板2 ResourseView面板3 FileView面板 1 3 5资源编辑器介绍 VisualC 6 0提供了资源编辑工具 用户可以方面的使用该工具创建资源如图标 光标 位图 菜单以供Windows程序使用 在VisualC 6 0中 资源编辑器为了引入资源 定义了一种与资源一一对应的符号 这样 资源可以方面的被使用 1 3 6输出窗口介绍 VisualC 6 0提供了一个输出窗口 它主要输出程序编译的结果 同时显示错误代码的行数 并给出错误提示 程序员可以在输出窗口中查看错误的提示 根据提示修改程序 大大加快了程序开发的效率 在程序的调试过程中 可以在输出窗口中观察变量的值变化 从而分析程序 如图1 18所示 1 4VisualC 6 0开发步骤与环境设定 VisualC 6 0作为一款优秀的开发工具 其编译链接的设定是比较重要的 如果设定不当 程序将无法运行 本节将介绍利用VisualC 6 0开发的步骤 以及编译环境的设定 1 4 1程序的开发步骤 编写任何程序都应该严格按照软件工程的程序设计规范进行 利用VisualC 6 0进行程序开发的基本步骤可以概括如下 1 分析问题 编写任何一个程序 都应该首先从实际问题中抽象出来其数学模型 求解出解决方法 并用一定的工具进行描述 2 编辑程序 编写源程序 利用VisualC 6 0的代码编辑工具编写代码 3 编译程序 编译源程序 生成目标文件 4 链接程序 将一个或多个目标文件与库函数进行连接后 产生可执行文件 5 运行调试程序 程序的错误不仅仅是语法方面的 更重要的是逻辑错误 必须进行严格的测试后 程序才可以发布 1 4 2开发环境的设定 VisualC 6 0是功能强大的开发环境 编译连接的选项较多 如果不能正确设置 程序将不能编译或者出现其他错误 单击 Tools Options 弹出 Options 对话框 如图1 19所示 在此对话框中可以对VisualC 6 0开发环境进行设定 1 Directories设置2 调整代码字体颜色和字体大小设置 1 5程序设计入门实例 helloword 本小节给出一个利用VisualC 6 0开发应用程序的实例 了解基本的操作步骤 菜单和工具栏的使用 1 6上机实践 1 创建一个简单的应用程序 了解菜单 工具栏的使用 熟悉VisualC 6 0集成开发环境 2 下载speechsdk5 1开发包 进行环境设置以包含所下载的开发包文件 1 7小结 本章介绍了VisualC 6 0集成开发环境的安装与卸载 重点讲解了VisualC 6 0的菜单的常用命令 同时介绍了VisualC 6 0的项目工作区和资源编辑器的使用 讲解了VisualC 6 0开发环境的设置 通过学习本章 读者应该了解VisualC 开发环境的特点 掌握VisualC 6 0环境的设置方法 掌握一般应用程序的开发步骤 1 8习题 1 简单描述利用VisualC 6 0开发应用程序的步骤 2 如何使用VisualC 6 0的资源编辑器创建资源文件 3 如何为VisualC 6 0添加新的头文件搜索目录 第2章C 语言基础 C 语言是对传统C语言进行面向对象的扩充 它是在C语言的基础上增加了对面型对象程序设计的支持 其语法特点和C语言十分接近 使用C 语言可以在VisualC 开发环境中开发出功能强大的应用程序 本章讲解的知识点包括 数据类型 运算符 表达式 控制结构 2 1面向对象程序设计概述 对象是是面向对象程序设计技术的核心 那么到底什么是对象 世界上的一切事物都是对象都是客观对象 人大脑中的认识和概念也是对象 可见对象可以是有形的实体 也可以是无形的认识 知识 事件等 概括的说对象就是一个实体 它具有一个名字标志 并且具有自身的状态和功能 面向对象的编程方法具有四个基本特征 1 抽象2 继承3 封装4 多态性 2 2数据类型 数据类型就是一类数据的集合 在计算机中 数据以某种特定的形式存储在计算机中 数据类型决定了数据在计算机中的存储形式 2 2 1常量与变量 常量是指在程序运行中 数值不能改变的量 例如13 28 a 2 3等 这些量在整个程序运行期间 其值不发生改变 在C 中 定义常量的语法如下所示 define标识符常数其中 表示这是一个宏定义命令 define为定义符号常量的关键字 标识符为常量的名称 常数为符号常量具体的数值 常量定义中关键字和标识符 以及标识符和常数之间必须留一个以上的空格 2 2 2简单类型 C 语言中的简单数据类型是指基本的数据类型 即整型 实型 字符型等 下面介绍其特点和用法 1 整型2 实型3 字符型 2 2 3字符串常量 字符常量是有单引号括起来的单个字符 C 语言同C语言一样 除了字符常量外 还支持字符串常量 字符串常量是由一对双引号括起来的字符序列 字符串常量和字符常量的区别是字符串常量在每一个字符串的最后一个字符的后面加上一个字符串结束标志 从而在程序访问时可以判断字符串的字符序列是否结束 2 2 4构造类型 C 语言中除了基本数据类型外 还提供了构造数据类型 即数组 数组是有序数据的组合 数组中的每一个元素都属于同一数据类型 这和C语言中的数组是完全一致的 数组包括一维数组和多维数组 数组的定义格式和引用方式与在C语言中是一致的 2 2 5文件类型 C 语言中提供了文件的数据类型 即C 把文件看做是字符序列 即文件是由一个一个字符数据顺序组成的 根据数据结构的组织形式 可以把文件分为文本文件和二进制文件 在C 中若要对文件进行输入输出 必须首先创建一个流 然后将流和文件相关联 即打开文件 此时才可以进行操作 然后关闭文件 由于文件的使用比较复杂 在后面的章节中将详细的介绍C 中文件的基本操作 2 2 6指针类型 C 语言中的指针和C语言中的指针是完全一样的 但是C 语言中提供了特殊的指针 即void型指针 它表示不确定的类型 void型指针是一种通用型指针 也就是说任何类型的指针都可以赋值给void型的指针变量 2 3数组 数组作为一种构造数据类型 它的使用和基本类型有很大不同 因此有必要对数组这一数据类型进行介绍 2 3 1一维数组 数组是有序数据的集合 在C 中一维数组的定义方式和C语言中一维数组的定义方式完全相同 并且使用方式 以及使用的注意事项都有C语言中基本一致 1 一维数组的定义2 数组的初始化3 一维数组的使用 2 3 2二维数组 在C 中二维数组与C语言中的二维数组的定义是一样的 一维数组是一行有序数据的结合 而二维数组则是一个有序数据的一个矩阵 1 二维数组的定义2 二维数组的初始化3 二维数组的使用 2 3 3字符型数组 前面已经介绍了在定义一维或者二维数组时 需要指定其类型说明符 类型说明符是基本数据类型 例如整型 浮点型 字符型等 但是字符数组与其他数组有时不同 下面对字符数组的特殊用法进行介绍 1 字符数组的定义2 字符串与字符数组3 字符数组的输入输出 2 4运算符 运算符就是表示变量之间进行数学运算或其他运算的符号 C 中的运算符基本沿用了C语言中的运算符 常见的运算符有以下几类 赋值运算符 算术运算符 逻辑运算符 关系运算符 位运算符 逗号运算符和条件运算符 本节对C 语言中常用的运算符进行介绍 2 4 1赋值运算符 赋值运算符就是赋值符号 它的作用是将一个数据赋给一个变量 在赋值操作中最常见的操作就是不同类型间的赋值 例如把整型常量赋值给实型变量 这中操作是合法的 但是发过来却是非法的 在实际的应用过程中应该注意同型变量之间进行赋值 尽量减少不同类型的赋值操作 2 4 2算术运算符 基本的算术运算符包括 和 程序设计中的算术运算不可能是同种类型之间的操作 因此就出现不同类型进行运算后的类型问题 C 语言规定 两个整数相除的结果为整数 如9 4的结果为2 舍去小数部分 在参加 的运算中 如果有一个数为实数 则结果为double型 2 4 3逻辑运算符 在程序设计中 使用较多 技巧性最强的运算就是逻辑运算 在循环语句和条件语句中 经常需要根据需要进行转移 其中最常用的就是逻辑运算符 是选择性判断 或 可以对条件中的或条件进行判断进行转移 是 与 需要程序中的多个条件都满足条件才可以转移 是非判断 即程序中某条件不满足什么情况时进行转移 2 4 4关系运算符 关系运算是和逻辑运算一样 在程序设计中经常用到 逻辑运算最常用的是判断某种具体值是否属于某类情况 例如计算1加到100的值 则需要从1加到100 期间需要判断变量是否大于100 从而设计程序 关系判断在程序设计中也是十分重要的运算 2 4 5位运算符 位运算是在程序设计中不经常使用 但是应用技巧性很强的一类运算 为运算主要包括 和 是右移运算符 实际上就是变量除二 是按位取反运算符 即把变量的二进制取反 是把两个变量按位进行异或 是两个变量按位相与 2 4 6逗号运算符 逗号运算符是一类比较特殊的运算符 其是将多个表达式连接起来 逗号运算符又称为顺序求值运算符 2 5表达式和语句 由运算符构成的式子称为C 语言的表达式 常见的表达式有赋值表达式 算术表达式和逗号表达式 赋值表达式是由赋值运算符构成的表达式 例如inta 10 虽然赋值表达式十分简单 但其应用广泛 函数的返回值可以直接作为赋值表达式右半部分 例如函数intfun 我们可以这样写出赋值表达式inti fun 逗号表达式即前面讲解的由逗号运算符构成的表达式 2 6程序控制结构 C 语言中有三种基本的程序控制结构 分别是顺序结构 选择结构和循环结构 几乎所有应用软件都会使用这三种程序控制结构 顺序结构比较简单 程序按照语句的顺序执行 选择结构和循环结构可以完成很多复杂的功能 本节对三种控制结构进行分析 讲解操作实例 2 6 1顺序结构 顺序结构是最简单 最常用的程序结构 顺序结构的典型特点是程序完全按照语句出现的先后次序执行 在顺序结构的程序中 最常用的是赋值语句 赋值语句是C 程序中最基本的语句 其作用是将表达式的值赋给变量或对象 赋值语句的语法格式如下 name expression 其中 name为变量或者对象 expression为表达式 2 6 2选择结构 选择结构是利用条件语句实现的 根据指定的条件表达式的结果 选择符合条件的某一分支执行相关操作 条件语句中的条表达式通常是关系表达式 逻辑表达式 数字表达式或者字符串表达式 选择结构程序设计是应用程序设计过程中较为常用的结构 关系运算符是选择结构中常用的判断语句 在C 语言中常用的就是if else语句 其最常用的形式有下面三种形式 1 第一种样式2 第二种样式3 第三种样式 2 6 3循环结构 循环程序设计也是程序设计中常用的结构之一 程序中一些代码段需要重复执行以实现某些功能 例如程序中要计算1加到100的值 那么如果选择顺序结构 那么相加语句至少要写99条 而如果使用循环结构 程序的结构会十分清晰 循环结构中常用的形式是for循环 while循环和dowhile循环 以及goto语句 1 for循环2 while循环3 goto语句4 do while循环5 break和continue语句 2 7C 的输入输出 在C语言中进行I O操作时使用的语句是scanf和printf语句 scanf和printf语句所使用的格式控制符与输入输出数据必须完全一致 但是C语言的编译器不会去检查这些问题 造成编程中的一些困难 在C 语言中使用了更安全和更方便的I O操作 即C 使用标准的输入输出流 C 预定义的标准流如表2 3所示 1 标准输入2 标准输出 2 8编程实例与调试 通过本章的学习 掌握了C 语言的基础知识 下面介绍C 程序设计中代码编写和程序调试的基本方法 2 8 1代码编写 分析基本问题后 就需要把实际问题抽象成一定的数学模型 然后通过软件设计工具进行描述后 根据此流程图编写程序 代码编写是程序中的基本工作之一 当把问题的数学模型做好以后 根据数学模型作出程序流程图 剩下的工作就是去编程实现 因此代码编写把数学模型去实现 那么代码编写要注意哪些问题呢 首先是注意根据程序流程图编写代码 然后注意代码的习惯 最后就是注意对代码的重复使用 2 8 2VisualC 项目文件介绍 在利用VisualC 进行软件开发时会在当前的工程目录下生成多个类型的文件 例如后缀名为 cpp文件是源码文件 而后缀名为 h文件是头文件 根据第一章使用向导创建的控制台的应用 其目录下生成的文件的后缀名如下 dsp文件 dsw文件 plg文件 opt文件 ncb文件 h文件 cpp文件 2 8 3调试与运行 程序代码编写完成后不可能没有错误 甚至说程序的逻辑错误比起语法错误更为严重 因此程序的调试就显的尤为重要 程序调试中可以利用单步执行 手工进行查找程序中的错误 然后进行排错 当然可以里哟没那个软件工程中的软件测试方法进行软件测试 确保软件的正确性 一般来说在VisualC 中常用的测试是单步运行和断点测试 2 9本章实例 数据排序 示例2 38 设计一个程序 对输入的十个整数按照从小到大进行排序 2 10上机实践 1 编写程序 求解1 2 3 99的值 2 11小结 本章主要介绍了C 的基本语法知识 C 语言是C语言在面向对象的扩充 C 语法和C语言的语法基本是相同的 C 使用了新的I O 通过本章的学习 掌握C 程序设计的基本步骤 掌握一般程序的调试方法 2 12习题 1 什么是面向对象的程序设计 2 C 语言的数据类型和运算符有哪些 3 常用的程序设计结构包括哪几种 其特点分别是什么 4 简述常用的几种循环结构的形式和特点 5 编写程序筛选100以内的素数 6 编程实现打印下面的图案 7 输入10个数据 从小到大进行排序并在屏幕上输出结果 利用while循环和do while循环两种方法 第3章函数 函数是实现某个特定功能的程序段 一个较大的程序需要由若干模块组成 模块化设计是当今软件工程所提倡的软件设计方法 一个C 程序可以由一个主函数和若干个子函数构成 函数的使用是当今软件设计中最为重要的方法之一 本章讲解的主要内容包括 函数的定义 函数的调用 函数运用实例 3 1概述 程序设计中可以用函数的形式设计能够完成某个功能的代码段 在整个软件中由主函数调用其它函数 其它函数之间也可以相互调用 同时一个函数可能被调用一次或多次 3 2函数定义 程序设计中经常需要进行函数的设计 函数的使用一般包括函数的定义和函数的使用 本小结就函数的定义进行介绍 3 2 1函数定义的一般形式 C 程序中函数的定义形式如下 类型标识符函数名 参数列表 声明部分语句 3 2 2函数参数 在上面可以看到函数的定义中有参数列表 那么什么是函数参数呢 在程序中主函数和其他函数进行调用的时候 一般都会有数据的传递 这就是参数 当然有的函数是没有参数的 下面先给出一个简单的函数定义及调用的例子 3 2 3函数的返回值 通常 函数的调用都可以返回一个特定的值 即函数的返回值 例如比较大小的函数 我们需要得到最大的值 利用赋值语句可以把函数的返回值赋给变量 下面对函数返回值进行说明 1 函数的返回值通过函数的return语句获得 2 函数的返回值的类型即函数的定义的类型 3 当函数返回值与函数定义的类型不同时 系统自动进行转换 得到函数定义的类型的返回值 3 3函数的调用 函数定义后 需要在程序中使用该函数来完成某种功能 上面的例子已经简单的进行了函数调用 本小节会系统的对函数调用进行说明 3 3 1函数调用的一般形式 函数的一般调用形式为 函数名 实参表列 一个函数有可能拥有一个或者多个参数 当然也可以没有参数 在函数定义是需要指定函数的参数 此时的函数参数称为形参 在函数调用时需要对这个函数传递变量 此时所传递的变量称为实参 一般情况下实参和形参的个数应该是相等的 但是C 语言有可能存在默认参数 所以实参和形参的个数有可能不同 函数调用有以下几种形式 1 函数语句2 函数表达式3 函数作为参数 3 3 2函数的嵌套调用 在C语言中 函数可以嵌套调用 在C 中函数的嵌套调用和C语言中是完全一致的 首先介绍函数的嵌套调用 除了主函数外 普通函数中也可以调用其他函数 这样就是函数的嵌套调用 3 3 3函数的递归调用 在调用一个函数时 直接或间接的再次调用本身 那么此种调用就称为函数的递归调用 函数递归调用有可能出现函数无休止调用的情况 因此函数的递归调用一定有某种跳出语句 即应当在满足某种条件下进行递归调用 否则不进行递归调用 3 4函数应用实例与调试方法 函数的应用非常广泛 那么函数如何调用 又是如何返回到主程序中的呢 本小节就这些问题进行讨论 3 4 1函数应用实例的代码编写 函数应用首先就需要编写函数的代码 那么如何确定函数如何去编写呢 要编写一个函数 首先需要知道此函数要完成的功能是什么 然后去确定函数的参数 参数和函数的功能是密不可分的 例如函数功能是实现比较两个数 那么函数的返回值就是较大或者较小的数 当然有可能返回其他值 但是返回值肯定是在程序中需要得到的 如 绦蛉肥挡恍枰 杓品祷刂担 敲纯梢苑祷0 或者设计函数为void类型 下面结合实例进行分析 3 4 2断点跟踪调试 调试程序时 经常利用设置断点使程序可停止的运行 这样可以在程序中动态的查看变量的值 断点设置的方法是 在要设置断点的位置单击 光标闪动 右击 在弹出的快捷菜单中单击 Insert RemoveBreakpoint 命令即可在光标处设置以断点 取消时同样是在要取消断点的那一行右击 在弹出的快捷菜单中单击 RemoveBreakpoint 命令即可取消本行的断点 或者利用弹出的快捷菜单的 DisableBreakpoint 命令和 EnableBreakpoint 设置断点状态 下面结合一个实例介绍利用断点跟踪调试的基本方法 3 5本章实例 汉诺塔游戏 函数的应用十分广泛 利用函数可以完成某一个功能 这样就使整个程序模块化更加清晰 下面给出函数综合应用的具体实例 示例3 12 编程实现汉诺塔游戏 输入一个整数 不大于10 输出转移过程 3 6上机实践 1 利用函数递归调用求解的值 其中N不大于5 参考代码 3 7小结 本章讲解了函数的定义和使用 讨论了函数的嵌套和递归 对于C 语言 函数的使用非常重要 利用函数可以进行某一模块功能的实现 使得程序可以进行模块化设计 在学习本章时 读者应该多进行上机操作 同时注意C 中语言的嵌套和递归的特点 了解C 中常用的库函数 以及函数所在的头文件 3 8习题 1 什么是函数 2 用递归法把一个整数m转化为倒叙排列 列入345变为543 m的位数不确定 可以为任意位数的整数 3 八皇后问题 在8 8的国际象棋上摆放八个皇后 使其不能相互攻击 即任意的两个皇后都不能处于同一行 同一列或同一条斜线上 问有多少种摆放方法 提示 利用递归函数实现 第4章C 的面向对象编程 C 是面向对象的程序设计语言 类是其实现面向对象的工具 类是面向对象程序设计 OOP 实现信息封装的基础 是C 语言最重要的特性 类是进行数据封装和数据保护的工具 本章主要知识点为 类和对象的基本概念 友元 派生类 继承与多重继承 多态 函数重载和运算符重载 虚函数 4 1类和对象的基本概念 类是现实事物共有特征的抽象 而对象是类的具体实例 在面向对象的程序设计中 总是先声明类 再由类生成其对象 类是建立对象的模板 对象则是类的一个实例 4 1 1从结构到类 在C语言中有一种自定义的数据类型 结构体 结构体中可以函数不同的数据类型 C 语言把结构体进行扩充 它不仅可以含有不同的数据类型 而且可以含有函数 在C 中结构体的定义形式如下 struct结构体名 成员表列 变量名表列 struct是定义结构体的关键字 后面的结构体名是结构体的名称 在结构体中可以定义一个或多个成员变量或这函数 当然也可以不定义变量 此时称为空结构体 变量名表列是在定义结构体时 同时定义结构体变量 也可以不定义变量 在后面用到的地方在定义结构体变量 需要注意的是结构体右括号的变量名表列后面需要添加一个 4 1 2成员函数的定义 类中含有两种成分 数据成员和函数成员 函数成员又称为成员函数 成员函数的定义有两种方式 1 方式一2 方式二 4 1 3对象的定义与使用 对象是类的具体实例 定义好类以后必须去定义类的对象才可以真正的去实现类的功能 一般情况下对象的定义有下面两种情况 1 声明类时直接定义对象2 声明类之后再定义对象 4 1 4对象的作用域 类是面向对象的体现 它具有一定的数据保护功能 类的作用域就是类的保护功能的机制 类的作用域是指类的声明部分中的一对花括号所形成的作用域 一个类的所有成员都在该类的作用域内 在上面的例子中已经看到类的私有成员变量不可以在类的外部所访问 因此需要定义一个公有成员函数间接的访问类的私有成员 4 2构造函数和析构函数 类是一种用户自定义的数据类型 定义一个类的对象时 编译程序需要为对象分配存储空间 进行必要的初始化工作 在C 中类的构造函数就是去实现这部分功能 4 2 1构造函数 构造函数是一种特殊的成员函数 它主要进行一些初始化工作 构造函数有一些基本性质 1 构造函数和类的名字相同 2 构造函数不具有返回值 3 定义对象时 系统自动调用构造函数 4 构造函数是公有函数 但它不可以被显示调用 4 2 2默认参数的构造函数 对于有参数的构造函数 在定义对象时必须给构造函数传递参数 实际情况中 虽然有些构造函数有参数 但其参数是不变的 这就是默认参数的构造函数 此时构造函数的形式如下 类名 函数名 参数1 默认值 参数2 默认值 构造函数中的参数与普通函数的参数是一样的 所谓的默认参数即为该参数设置一个默认的取值 可以为全部或者部分参数设置默认值 4 2 3析构函数 析构函数也是一种特殊的成员函数 它执行和构造函数相反的工作 析构的特殊性质如下 1 析构函数名称与类名相同 但前面加一个 2 一个类中只有一个析构函数 并且该函数不带任何参数 3 当撤销对象时编译系统自动调用析构函数 4 若程序员没有定义析构函数 编译系统会生成析构函数 4 2 4重载构造函数与拷贝构造函数 C 允许重载构造函数 所谓的重载构造函数是指允许在类中有多个构造函数 当然这些构造函数肯定是有区别的 各个构造函数必须拥有不同的参数个数或者参数类型 4 3友元 类的主要特点是是数据隐藏 即类的私有成员只可以被类的内部使用 但是有的时候需要在类的外部访问类的私有成员 为此C 利用了一种新的机制 友元 4 3 1友元函数 友元函数不是类的成员函数 而是独立于当前类的外部函数 但它可以访问该类的所有成员 在类的定义中声明友元函数时 需要在函数名前面加上friend 友元函数可以定义在类的内部 也可以在类的外部定义 注意 友元在类的封装性中打了个孔 使封装性的强度下降 程序中如非必要 应尽量减少友元的使用 4 3 2友元成员 除了一般的函数可以作为类的友元外 一个类的成员函数也可以作为另一个类的友元 这样的函数不仅可以访问本类的所有成员 还可以访问其友元类的所有成员 需要注意的是当在一个类中的某个成员函数定义为另一个类的友元函数时需要首先定义此类 例如要定义类A的某个函数为类B的友元函数 那么需要先定义类B 然后再进行类A的成员函数与B友元的定义 4 3 3友元类 不仅函数可以作为一个类的友元 一个类也可以作为另一个类的友元 定义方法是在类的声明中加入语句friend类名 4 4派生类 继承是面向对象程序设计的一个重要特性 它允许在现有类的基础上创建新的类 可以继承原有类数据和函数 同时可以添加新的成员 继承特性增加了代码的重复利用率 加快开发效率 通过继承已有的一个或多个类产生一个新类的过程称为派生 通过派生可以创建一种新的类 所创建的新类称为派生类 4 4 1派生类的引出 现实世界中 继承的概念十分广泛 人们认识世界就是一个层次结构 越靠近上层就表示越为普遍的概念 例如下面的一个层次结构 在类中 继承的概念就是从父辈得到其属性 即产生的新类就是原有类的派生 原有类就是派生类的基类 派生类的声明形式如下 class类名 继承方式基类 4 4 2基类成员在派生类中访问属性 派生类继承基类的方式有三种情况 那么继承过来的成员其属性如何呢 下面给出三种继承方式下的基类成员在派生类中的访问属性 4 4 3派生类对基类成员的访问规则 派生类对基类成员的访问形式包括内部访问和对象访问两种方式 下面对三种继承方式下的访问规则分别进行介绍 1 私有继承2 保护继承3 公有继承 4 5派生类的构造函数与析构函数 派生类继承了基类的成员 实现了代码的重复利用 但是继承的目的更主要的是功能的扩充 基类的构造函数和析构函数不能被继承 如果在派生类中需要对新增加的成员进行初始化 则需要加入派生类的构造函数 同样派生类也需要添加虚构函数来实现一些结束工作 4 5 1派生类构造函数和析构函数的执行顺序 当创建对象时 编译系统会自动调用构造函数 当撤销对象时 编译系统会自动调用析构函数 当创建派生类的对象时 首先执行基类的构造函数 然后执行派生类的构造函数 当撤销对象时 则先执行派生类的析构函数 然后再执行基类的析构函数 4 5 2派生类构造函数和析构函数的构造规则 派生类不能继承基类的构造函数 如果基类中含有带参数的构造函数 则派生类中必须定义构造函数 用以向基类传递参数 派生类的构造函数的定义必须包含基类的参数 其定义的一半格式为 派生类名 全部参数列表 基类名 参数列表 派生类的析构函数和基类的析构函数关系不大 程序中可以分别进行设计 4 6继承与多重继承 继承使得派生类既保持了基类的特性 又可以增加新的功能 如果一个类 其属性可以从多个基类中获得 这就需要多重继承的概念 4 6 1继承和多重继承 继承是一个类从一个基类中派生 多重继承则是指一个类从多个基类进行派生 现在有一个类A和类B 现在要设计一个类C 它需要既继承类A的特性 又继承类B的特性 那么类C就需要多成继承类A和类B 4 6 2多重继承的声明 在C 中 类的多重继承与单继承的声明相似 其一般形式是 class派生类名 继承方式1基类1 继承方式n基类n 在多重继承中 派生类的构造函数要进行基类的初始化工作 因此如果任何一个基类的构造函数含有参数 那么派生类必须添加构造函数 构造函数的执行顺序是先执行基类的构造函数 在执行派生类的构造函数 同一层次的基类的执行顺序与声明时的顺序有关 相反析构函数的执行与构函数的顺序相反 4 6 3虚基类 如果一个派生类的基类是从一个共同的基类派生出来的 那么派生类的对象就是从底层基类的间接派生 它会出现多个基类的拷贝 程序中如何进行分辨呢 一种方法是利用作用域运算符 即在访问基类的成员时明确指出要访问的是哪一个基类的数据成员 另一种方法是利用虚基类 虚基类是让基类只有一个拷贝 程序中的访问就不会出现访问的不确定性 虚基类在派生类中声明 其格式为 class派生类名 virtual继承方式基类 虚基类的声明与普通的继承形式相同 只不过要在继承方式的前面添加关键字 virtual 当使用虚基类时 基类只有一个拷贝 程序中的访问具有确定性 4 7多态的基本概念 程序的多态性是指不同的对象收到相同的消息而作出不同的动作 多态性包括运行时的多态性和编译时的多态性 编译时的多态性是指编译时的多态 通过函数重载和运算符重载来实现 运行时的多态则通过继承和虚函数来实现 1 编译时的多态性2 运行时的多态性 4 8函数重载和运算符重载 函数重载和运算符重载可以实现编译时的多态性 从而可以动态的决定程序的动作 函数重载可以使程序设计更加灵活 运算符重载利用运算符函数来实现 4 8 1函数重载 派生类可以改写基类的成员函数 从而实现新的功能 这就是函数重载 函数重载后 程序员使用派生类的对象可以访问基类或者是派生类的成员函数 函数重载提高了程序设计的灵活性 4 8 2运算符重载 在C 中 除了对 可以对函数进行重载外 还可以对运算符进行重载 运算符的重载通过创建运算符函数operator来实现 运算符重载定义了重载的运算符的操作 函数ooperator的操作对象是一个类 同时operator可以是这个类的成员函数 可以是类的友元函数 运算符重载在实际运用中有十分重要的意义 例如复数的四则运算就可以借助运算符重载来实现 运算符重载包括两种形式 一是重载为类的成员函数 一是重载为类的友元函数 其形式如下 1 重载为类的成员函数 函数类型operator运算符 参数表 2 重载为友元函数 friend函数类型operator运算符 参数表 4 9虚函数 虚函数是重载的另一种表现形式 它提供了一种动态机制 使程序运行更加灵活 一个基类的指针可以指向派生类的对象 但是利用基类指针调用类的函数时仍然调用的是基类的成员函数 例如下面的例子 4 10本章实例 类的使用 上面介绍了继承 多态和重载的基本概念和使用方法 C 作为面向对象的程序设计语言 继承 多态和重载的出现使C 面向对象的特点体现的更加明确 本节给出几个例子 示例4 26 创建复数类 利用运算符重载 实现其加法和减法 4 11小结 继承 封装和多态是面向对象程序设计的三大特性 本章详细介绍了C 的面向对象程序设计理论 介绍了类的基本概念和基本操作 对派生类和基类的构造函数和析构函数的执行顺序进行分析 讨论了如何通过虚函数实现多态 介绍了纯虚函数将接口与实现进行分离 VisualC 提供类库 其是一整套的类 掌握类的继承 封装和多态是利用MFC进行程序设计的基础 4 12习题 1 构造函数和析构函数的作用是什么 写出其基本性质 2 什么是友元 什么是友元函数和友元类 3 继承方式有哪几种 每种方式的派生类对基类成员的继承性如何 4 派生类的构造函数和析构函数的构造规则如何 其执行顺序又是如何 5 虚函数与多态性有什么关系 6 虚函数在派生类中的特征是否被继承 第5章MFC与Windows编程基础 MFC是微软的基础类库 其核心是以C 类的形式封装了Windows的API函数 利用VisualC 6 0可以快速开发基于MFC的Windows应用程序 利用本章讲解的主要内容包括 MFC介绍 MFC常用类 Windows编程知识 5 1Microsoft类库介绍 Microsoft基础类库 MicrosoftFoundationClassLibrary MFC 的本质是一个包含了许多已经定义好了的类的类库 MFC是微软提供的 封装了大量WindowsAPI的C 类库 它基本封装了Windows的所有API函数 因此利用MFC建立应用程序更加符合面向对象的思想 同时利用向导所建立的应用程序隐藏了程序设计的很多细节 例如消息的管理和设备环境绘图 5 2MFC常见类介绍 VisualC 6 0版本的MFC类库包含200多个类 了解和掌握常用类的使用可以加快程序提高的效率 同时也可以更深入的理解基于MFC应用程序的整个框架 5 2 1CObject类 CObject类在前面已经介绍过了 该类是大多数MFC类的根类或基类 该类包括了对运行时类信息的支持 对动态创建的支持 对串行化的支持 对象诊断输出等等 MFC从CObject派生出许多类 其派生类具备了CObject类的特性 5 2 2窗口类 窗口类和它的派生类都封装了Windows窗口句柄 窗口类一般包括窗口支持类 窗口框架类 视图类 控件类和对话框类 窗口支持类CWnd CWnd是Windows所有窗口类的基类 它所包含的函数为基本的窗口操作函数 包括创建窗口 管理窗口的显示和Windows消息处理等 5 2 3文件类 MFC提供的文件I O类封装了对磁盘文件 Active文件 内存文件的操作 常见的文件类有下面几种 CFile类 文件类的基类 封装了对二进制磁盘文件的操作 CSharedFile类 封装了对共享内存文件的操作 CSocketFile类 封装了对WindowsSocket的操作 CStdioFile类 封装了对缓冲流磁盘文件的操作 CMemFile类 封装了对内存文件的操作 5 2 4网络类 MFC中提供了对网络的支持 封装了丰富的网络通信和相关的操作 利用这些类可以方便的开发网络程序 1 WindowsSocket类2 Win32Internrt类 5 2 5ODBC类 MFC中封装了对数据库访问 使得程序对数据库进行操作更加方便 常用的ODBC类主要是下面几个 1 CDatabase 封装了对数据源的连接操作 2 CRecordset 封装了从数据源中选择记录 3 CRecordView 封装了对记录集的数据显示操作 4 CDBException 数据库操作的异常类 MFC中封装了对数据源的访问的一些类 数据源是屏蔽了数据库管理系统之间的差异性之后所抽象的一种数据结合 利用ODBC可以方便的访问绝大部分的数据库管理系统 5 2 6辅助类 在MFC中提供了许多辅助性的类 其中包括时间类 字符串类 屏幕类等 这些类没有统一的基类 其类的层次如图5 2所示 在MFC的辅助类中提供了很多实用的内容 利用CString是字符串类 它使得MFC对字符串的操作十分简单 在后面的学习过程中会经常使用MFC中所提供的辅助类 读者可查阅MSDN或者其他资料学习各种类的使用 5 3Windows编程基础知识 Windows程序与DOS程序不同 Windows程序是基于事件驱动的应用程序 Windows程序设计出现很多与DOS程序不同的概念 例如句柄 消息机制等 5 3 1窗口 窗口是Windows程序的基本操作对象 是应用程序与用户进行交互的接口 Windows系统最大的优点就是其可视化的操作 一个应用程序由一个或多个窗口组成 可以很方面的与用户进行交互 编写Windows应用程序首先就是创建窗口 然后再编写窗口与应用程序之间的数据交换 完成所要实现的功能 5 3 2事件驱动 Windows应用程序实际是围绕事件驱动来进行的 事件驱动模型与传统的过程模型不同 事件驱动是一种灵活的操作机制 它处理的对象是一个事件 或者说是一个消息 例如 用户按下键盘或者点击鼠标都会向应用程序发送这一消息 应用程序收到消息就可以根据消息转到其对应的处理程序 VisualC 的MFC的应用程序封装了消息的处理流程 程序员不必关系应用程序如何接收到消息的 程序员只需要编写消息的处理程序便可以完成整个应用程序的设计 当然程序员可以在必要的情况下截获消息甚至发送一个消息 5 3 3句柄和Windows消息 句柄是只Windows使用的一个惟一的整数值 是一个4字节长的数值 它用于标识应用程序种不同的对象和同类对象的不同实例 应用程序通过句柄可以访问相应的对象的信息 Windows系统中对于不同的Windows内容的句柄使用了不同的句柄类型 例如窗口句柄类型为HWND等 1 WM LBUTTONDOWN2 WM KEYDOWN3 WM CHAR4 WM CREATE5 WM CLOSE6 WM DESTROY7 WM PAINT8 WM QUIT 5 4Windows应用程序的基本结构 Windows应用程序的组成包括C 源文件 C 头文件 模块定义文件 资源文件和项目文件这几种 要设计一个应用程序 可以选择MFC框架程序 也可以利用Windows提供的API函数进行编写 但一般来说MFC封装了绝大部分的API函数 利用MFC框架可以快速的开发出Windows应用程序 5 5上机实践 1 利用VisualC 6 0开发环境的联机帮助系统查看MFC类库的组织结构 了解常见类的层次结构 2 利用向导生成基于对话框的应用程序 了解Windows程序的基本结构 5 6小结 本章介绍了MFC的基础知识 对程序设计中的常用类进行了介绍 讲解了Windows程序设计的基本知识 包括窗口的概念 消息的概念等等 列出了Windows程序的常见消息 对Windows应用程序的基本结构进行了介绍 给出了Windows程序区别于DOS程序的原因 5 7习题 1 MFC类库中涉及到的领域有哪些 其中的主要类包括哪些 2 Windows程序中的窗口的含义是什么 3 Windows程序传统程序的区别是什么 4 句柄的作用是什么 常用的句柄有哪些类型 5 Windows应用程序的基本结构是什么样的 第6章对话框应用程序设计 对话框应用程序设计不仅仅是创建基于对话框的应用程序 而且在文档 视图应用程序中也可以创建对话框作为程序的一部分 在Windows应用程序中 对话框经常作为与用户进行交互的界面 对话框为其他一些控件的容器 Windows对控件操作进行了标准化 使得对话框的应用十分广泛 本章讲解的知识点包括 创建基于对话框程序的基本步骤 对话框的基本操作 控件的使用 通用对话框的使用 6 1创建对话框应用程序 创建对话框应用程序需要使用应用程序向导功能 使用该功能 可以方便的创建应用程序的框架 程序员可以在此基础上添加实现预订功能的代码 从而创建实现预定功能的应用程序 利用应用程序向导创建基于对话框的应用程序 向导会生成两个基本的类 如果应用程序的名称为geliang 那么两个类为CgeliangApp和CgeliangDlg CgeliangApp为程序运行的基础 它使程序在Windows下可以运行多个实例 CgeliangDlg是对话框类 应用程序向导同时为他所创建的每一个目标类编写了相应的消息映射 因此程序的消息相应代码就十分容易加到程序中去 这样就加快了基于对话框应用程序设计的效率 6 2对话框的操作 对话框的操作包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论