C语言面向对象程序设计

上传人:za****8 文档编号:23457360 上传时间:2021-06-08 格式:PPT 页数:21 大小:83KB
收藏 版权申诉 举报 下载
C语言面向对象程序设计_第1页
第1页 / 共21页
C语言面向对象程序设计_第2页
第2页 / 共21页
C语言面向对象程序设计_第3页
第3页 / 共21页
资源描述:

《C语言面向对象程序设计》由会员分享,可在线阅读,更多相关《C语言面向对象程序设计(21页珍藏版)》请在装配图网上搜索。

1、8. MFC类 库 及 程 序 框 架Windows编 程 思 想 : 事 件 驱 动 , 即 靠 消 息 循 环 机 制 实 现消 息 举 例 : Word中 用 户 选 择 菜 单 中 的 打 印 , 即 向 该 文 档 的 的 printer对 象 发 消 息程 序 根 据 消 息 执 行 相 应 的 方 法 (即 成 员 函 数 ) 当 启 动 一 个 面 向 对 象 程 序 时 , 程 序 将 做 :创 建 对 象 ;通 过 消 息 处 理 对 象 , 即 执 行 对 象 的 方 法 , 删 除 对 象 ;Windows应 用 程 序 的 四 种 消 息 来 源 :1. 输 入 消

2、息 : 鼠 标 键 盘 输 入 的 消 息2. 控 制 消 息 : 用 户 改 变 控 制 状 态 时 的 消 息3. 系 统 消 息 : 如 创 建 窗 口 的 消 息4. 用 户 消 息 : 用 户 定 义 并 在 程 序 中 主 动 发 送 的 消 息消 息 映 射 表 典 型 windows应 用 程 序 结 构 :1. 控 制 台 应 用 程 序 (Console Application)2. 基 于 框 架 窗 口 的 应 用 程 序 (Win32 Application): 用 CFrameWnd派 生 类 产 生 对 象3. 基 于 对 话 框 的 应 用 程 序 (MFC A

3、ppWizard(exe): 用 Cdialog派 生 类 产 生 对 象4. 基 于 文 档 /视 图 结 构 的 应 用 程 序 (MFC AppWizard(exe)两 种 类 型 : 单 文 档 界 面 ; 多 文 档 界 面 ;单 文 档 界 面 : 例 记 事 本 、 写 字 板 、 终 端 仿 真 界 面 等多 文 档 界 面 : 例 Word、 Powerpoint、 Excel、 VC+等多 文 档 界 面 有 一 个 当 前 活 动 窗 口 , 有 窗 口 菜 单特 点 : 将 数 据 操 作 与 数 据 显 示 分 开 , 数 据 操 作 在 文 档 中数 据 显 示 在

4、 视 图 中 ; 系 统 支 持 的 功 能 多 ; 但 系 统 的辅 助 代 码 也 多 。 程 序 举 例 :第 一 种 已 建 立 过 ;第 二 种 , 见 例 子 test1, test2, test3第 三 种 , 见 例 子第 四 种 , 单 文 档 界 面 : 见 例 子 test4 多 文 档 界 面 ; 见 例 子所 有 四 种 程 序 结 构 中 , 多 文 档 界 面 结 构 最 复 杂 , 功 能 也 最 强 9. 面 向 对 象 程 序 设 计( Object-oriented programming)类 是 一 种 对 事 物 对 象 的 抽 象 , 并 提 倡 多

5、 层 次 的 抽 象 ; 类 的 组 合 : 表 示 事 物 对 象 之 间 的 联 系 。面 向 对 象 方 法 的 四 个 特 点 : 抽 象 、 封 装 、 继 承 、 多 态类 的 定 义 是 将 数 据 与 处 理 数 据 的 方 法 封 装 在 一 起 , 可 以 隐 藏 数 据 , 并 通 过 对 象 访 问 数 据多 态 : 同 样 的 消 息 被 不 同 的 对 象 接 受 时 产 生 不 同 的 方 法 , 如 : 打 印 文 档 时 , 打 印 文 本 和 打 印 图 像 的 方 法 不 同 。 继 承 机 制 使 程 序 在 已 有 基 础 上 进 行 更 具 体 的

6、定 义 , 代 码 可 以 重 用 , 软 件 工 程 Josephus问 题 : n个 孩 子 围 成 一 圈 玩 游 戏 , 从 第 i个 孩 子 开 始 数 , 数 到 m,则 该 小 孩 离 开 , 接 着 继 续 数 , 找 到 下 一 个 需 离 开 的 孩 子 , 如 此 玩 下 去 , 圈 子 只 剩 下 最 后 一 个 孩 子 , 该 孩 子 为 胜 利 者 。请 编 一 个 程 序 , 求 Josephus问 题 的 胜 利 者 , 已 知 : 共 有 n个 孩 子 , 每 次 数 m个 小 孩 则 离 开 一 个 , 第 一 次 从 第 i个孩 子 开 始 数 。考 虑

7、问 题 的 方 法 :1. 用 什 么 数 据 类 型 存 放 n个 孩 子 , 如 何 表 示 n个 孩 子 ;2. 在 这 种 存 放 方 式 下 , 用 什 么 算 法 求 解 Josephus问 题 的 胜 利 者 。 该 问 题 可 以 用 多 种 方 法 编 写 程 序 :不 同 的 存 放 结 构 , 则 有 不 同 的 实 现 程 序 ( 即 算 法 ) 。 如 : 数 组 方 式 存 放 , 见 教 材 第 140页 ; 结 构 链 表 存 放 , 见 教 材 第 227页 ;main() 读 初 值 : 小 孩 总 数 、 数 小 孩 间 隔 数 、 第 一 次 数 的 位

8、 置 ;建 立 小 孩 结 构 数 组 并 初 始 化 ;初 始 化 环 链 表 ;while(当 链 表 中 有 一 个 以 上 节 点 时 ) 找 下 一 个 应 离 队 的 节 点 并 输 出 ;从 链 表 中 删 除 该 节 点 ; 输 出 最 后 一 个 节 点 (即 胜 利 者 ) 改 进 链 表 , 用 结 构 化 的 函 数 模 块 方 法 实 现 :建 立 以 下 几 个 函 数 模 块 :1. 数 据 初 始 化 : 孩 子 总 数 , 数 孩 子 的 间 隔 数 , 开 始 数 的 位 置2. 环 链 表 初 始 化 , 即 建 立 环 链 表3. 按 照 间 隔 数 m

9、在 环 链 表 中 数 小 孩4. 按 照 离 队 顺 序 , 输 出 所 有 小 孩 , 并 给 出 胜 利 者节 点 类 型 定 义 (即 一 个 小 孩 ):struct Jose int code;Jose * next;其 函 数 声 明 如 下 :1. int assign(int *, int *, int *)三 个 参 数 分 别 为 指 向 总 数 、 间 隔 数 、 开 始 位 置 的 指 针函 数 返 回 值 为 1, 则 初 始 化 成 功 ; 为 0, 则 失 败 2. Jose * initial(int , Jose *)两 个 参 数 分 别 为 总 数 和

10、结 构 指 针 , 指 向 待 初 始 化 的 结 构 数 组函 数 返 回 值 为 指 向 环 链 表 的 最 后 一 个 节 点 的 指 针 1 23n-1n . 3. Jose * count(int, Jose *)两 个 参 数 分 别 为 数 小 孩 的 个 数 、 当 前 节 点 的 指 针函 数 返 回 值 为 数 了 小 孩 个 数 后 的 当 前 节 点 的 前 一 个 节 点 的 指 针4. void process(int, int, Jose *)三 个 参 数 分 别 为 小 孩 总 数 、 间 隔 数 、 当 前 节 点 的 前 一 个 节 点的 指 针主 函 数

11、 的 定 义 为 :void main() int n, m, begin;if(! assign( /数 据 初 始 化 出 错 return;Jose *pJose = new Josen, *pCur, *pivot; /分 配 n个 节 点pCur = initial(pJose); /初 始 化 环 链 表pivot = count(begin, pCur); /当 前 指 针 指 向 开 始 位 置process(n, m, pivot); /按 照 离 队 顺 序 , 输 出 n个 小 孩delete pJose; /释 放 n个 节 点 函 数 定 义 :int assign(

12、int *np, int *mp, int *bp) int tn, tm, tb;couttntmtb;if( tn 2) /校 验 小 孩 总 数cerr“总 数 输 入 要 大 于 1,n”;return 0;if( tm tn) /校 验 间 隔 数cerr“间 隔 数 输 入 要 大 于 0或 小 于 等 于 ” tnendl;return 0;if( tb 0) /校 验 开 始 位 置cerr“开 始 位 置 输 入 要 大 于 等 于 0n”; return 0;*np = tn; *mp = tm; *bp = tb;return 1; Jose * initial(int

13、n, Jose * jp) int nline=0;Jose * px = jp;for(int i=1; i next = jp + i%n; /初 始 化 环 形 链 表px -code = i;px = px-next;if (nline + % 10) = 0) /每 行 输 出 10个 小 孩 编 号coutendl;coutsetw(4)i;coutendl;return( jp + n -1 ); /返 回 结 构 数 组 的 最 后 一 个 元 素 jp px Jose *count(int num, Jose * pcur) Jose *ptf;for(int i=0; in

14、ext;return ptf; /返 回 从 pcur开 始 的 第 num个 节 点 的 前 一 个 节 点void process(int n, int m, Jose *pf) int nline=0;Jose *pcur = pf-next;for(int i=1; i next; /第 m个 节 点 由 pcur指 向 if(nline+ % 10) = 0) /每 行 输 出 10个 小 孩 编 号coutendl;coutsetw(4)code;pf-next = pcur-next; /当 前 指 针 所 指 的 节 点 离 队pcur = pf;cout“nthe winne

15、r is “codeendl; /输 出 胜 利 者 . pcur pf 用 类 定 义 Josephus问 题 :首 先 确 定 类 , 类 的 属 性 和 操 作 定 义 两 个 类 :Ring类 属 性 : 链 表 的 始 地 址 ; 当 前 指 针 ; 哨 兵 指 针 操 作 : 按 照 间 隔 数 确 定 当 前 指 针 ; 输 出 小 孩 的 编 号 ; 将 当 前 小 孩 从 链 表 中 删 除 ; 构 造 环 链 表 ; 析 构 环 链 表 ;Jose类 属 性 : 总 数 ; 间 隔 数 ; 开 始 位 置 操 作 : 属 性 赋 初 值 ; 处 理 所 有 小 孩 并 找

16、出 胜 利 者 /文 件 为 ring.hstruct Boy int code;Boy *next;class Ring public: Ring(int);Ring();void count(int);void putboy();void clearboy();protected:Boy * pBegin; Boy * pivot;Boy * pCur; /文 件 为 Ring.cpp, 定 义 Ring类 的 成 员 函 数#include #include #include “ring.h”Ring:Ring(int n) pBegin = new Boyn; /分 配 大 小 为 n

17、的 结 构 数 组pCur = pBegin;for(int i=1; i next = pBegin + i%n;pCur-code = i;putboy();pCur = pCur-next; coutendl;pCur = pBegin + n -1; /当 前 指 针 为 结 构 数 组 的 最 后 一 个 元 素Ring:Ring() delete pBegin; /释 放 结 构 数 组 pBegin pCur void Ring:count(int m) for(int i = 0; i next;void Ring:putboy() static int nline; /静 态

18、 局 部 变 量 , 纪 录 当 前 行 输 出 的 小 孩 个 数if(nline + % 10 ) = 0)coutendl;coutsetw(4)code;void Ring:clearboy() pivot-next = pCur-next;pCur = pivot; . pcur pivot /文 件 为 jose.hclass Jose public: Jose(int n=10, int m=3, int begin=1) numofBoys = n;interval = m;beginPos = begin;void assign();void getwinner();prot

19、ected:int numofBoys;int interval;int beginPos; /文 件 为 jose.cpp, 定 义 Jose类 的 成 员 函 数#include #include “jose.h”#include “ring.h”void Jose:assign() int tn, tm, tb;couttntmtb;if( tn 2) /校 验 小 孩 总 数cerr“总 数 输 入 要 大 于 1,n”;return ;if( tm tn) /校 验 间 隔 数cerr“间 隔 数 输 入 要 大 于 0或 小 于 等 于 ” tnendl;return ; if(

20、tb 0) /校 验 开 始 位 置cerr“开 始 位 置 输 入 要 大 于 等 于 0n”;return ;numofBoys = tn; /数 据 输 入 都 合 法 时 , 给 Jose类 的 数 据 成 员 赋 值interval = tm;beginPos = tb; void Jose:getwinner() Ring x(numofBoys); /定 义 一 个 环 链 表 , 大 小 为 numofBoysx.count(beginPos); /环 链 表 的 当 前 位 置 在 beginPosfor( int i=1; i numofBoys; i+) /按 照 规 则

21、 处 理 离 队 小 孩x.count(interval); /找 下 一 个 应 该 离 队 的 小 孩x.putboy(); /输 出 该 小 孩x.clearboy(); /删 除 该 小 孩cout“nthe winner is “;x.putboy(); /输 出 胜 利 者 /文 件 为 main.cpp#include “jose.h”void main() Jose jose; /定 义 一 个 Jose类 的 对 象jose.assign();jose.getwinner(); 总 结 与 复 习1. 类 的 定 义 、 类 的 成 员 ; 对 象 、 对 象 初 始 化2. 拷 贝 构 造 函 数 、 静 态 成 员 、 友 元3. 继 承 、 虚 函 数 与 多 态 执 行 、 抽 象 类4. 多 重 继 承5. 运 算 符 重 载 ( 自 定 义 类 型 的 运 算 )6. I/O文 件 流 的 定 义 与 使 用7. 模 板 定 义以 下 内 容 不 考 :( MFC类 库 、 面 向 对 象 方 法 、 异 常 处 理 )

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

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

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


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