1、C+面 向 对 象 技 术 课 程 实 验指 导 用 书课 程 名 称 : 程 序 设 计 ( II) 实 验单 位 : 中 山 大 学 软 件 学 院编 写 : 张 锋2010 年 2 月 (第 六 版 )1一 、 目 的 与 要 求 :通 过 上 机 实 验 理 解 C+程 序 的 执 行 过 程 , 掌 握 C+语 言 的 语 法特 征 ; 熟 练 掌 握 在 Visual C+开 发 环 境 下 独 立 编 写 和 调 试 C+程序 ; 掌 握 面 向 对 象 程 序 和 泛 型 程 序 设 计 思 想 和 技 术 , 建 立 起 用 面 向 对象 思 维 和 泛 型 思 维 进 行
2、问 题 分 析 和 程 序 设 计 的 习 惯 ; 掌 握 用 C+语 言 解 决 实 际 问 题 的 方 法 , 建 立 优 秀 的 面 向 对 象 编 程 和 泛 型 编 程 风 格 ,为 进 行 大 型 程 序 设 计 和 科 研 编 程 打 下 基 础 。二、学时分配6 个实验共 36 学时实 验 名 称 学 时 分 配实 验 一 、 C+程 序 设 计 基 础 与 开 发 环 境 4实 验 二 、 类 与 对 象 6实 验 三 、 运 算 符 重 载 6实 验 四 、 继 承 机 制 、 虚 基 类 、 虚 函 数 与 运 行 时 多 态 8实 验 五 、 模 板 、 STL 与 泛
3、 型 编 程 8实 验 六 、 异 常 处 理 、 C+ I/O 流 423三 、 实 验 目 的 和 实 验 内 容实 验 一 、 C+程 序 设 计 基 础 与 开 发 环 境【 实 验 目 的 】1 通 过 实 验 体 会 C+在 面 向 过 程 程 序 设 计 方 面 与 C 的 异 同2 初 步 了 解 C+的 程 序 设 计 风 格3 掌 握 函 数 重 载 和 命 名 空 间4 进 一 步 熟 悉 Visual C+集 成 开 发 环 境【 实 验 内 容 】1 编 写 一 个 完 整 的 面 向 过 程 风 格 的 C+程 序 , 满 足 以 下 条 件 :1) 三 个 重 载
4、 函 数 , 分 别 接 收 两 个 整 数 、 两 个 浮 点 数 和 两 个 字 符 串 做参 数 (引 用 类 型 ), 实 现 两 个 数 互 相 交 换 。2) 在 主 函 数 中 输 入 交 换 前 和 输 出 交 换 后 的 两 个 数 , 实 现 两 数 值 交 换 。3) 主 函 数 应 给 出 必 要 的 输 入 提 示 。2 有 以 下 namespace 定 义 ,namespace mynspaceconst int SIZE = 100;int ASIZE;int mode(int , int);mode 函 数 的 功 能 是 输 出 数 组 中 的 众 数 ,
5、及 其 出 现 的 次 数 , 其 返 回 值是 众 数 的 个 数 。 完 成 mynspace 的 定 义 , 并 在 main 函 数 中 写 出 完 整程 序 , 演 示 函 数 的 功 能 (将 mynspace:A 作 为 实 参 传 给 mode 函 数 )。3 分 别 写 C 和 C+程 序 , 将 文 本 文 件 old.txt 中 的 所 有 内 容 拷 贝 到 新 文件 new.txt 中 。 4 输 入 下 面 的 程 序 , 用 编 译 器 的 单 步 调 试 功 能 观 察 其 输 出 , 说 明 为 什 么 ?如 果 把 注 释 语 句 中 的 注 释 符 号 “
6、/”去 掉 , 程 序 能 运 行 吗 ? 试 解 释 原 因 。#include using namespace std;namespace alipint ai=16, aj=15, ak=23;int aj=0;4void mainip()/cout,()三 个 运 算 符 。 试 完成 类 定 义 , 使 得 类 vectorContainer 的 对 象 VC 表 现 出 以 下 行 为 :VCi; /打 印 VC 中 第 i 个 向 量 的 所 有 元 素 , i 为 整 数 ,下 同VC-output();/打 印 VC 中 某 个 向 量 所 有 元 素 及 其 元 素 和 ,
7、 该 向量的 元 素 和 在 所 有 向 量 元 素 和 中 是 最 大 的VC(); /把 VC 中 的 向 量 按 照 其 元 素 和 大 小 排 序 , 然 后 顺 序 输 出 向量 及 其 元 素 和VC(i); /把 VC 中 的 向 量 按 照 其 元 素 和 由 小 到 大 排 序 , 然 后 输 出第 i 个 向 量 所 有 元 素 及 其 元 素 和7VC(i, j);/输 出 第 i 个 向 量 的 第 j 个 元 素 。思 考 以 下 问 题 :Vector 类 和 vectorContainer 类 有 良 好 的 “封 装 性 ”吗 ?如 果 vectorContai
8、ner 不 是 Vector 的 友 元 , 代 码 应 如 何 改 动 ? class Vectorfloat v4;/friend class vectorContainer;public:Vector(float ve)for (int i=0; i();void operator()();Vectorfloat;实 验 四 、 继 承 机 制 、 虚 基 类 、 虚 函 数 与 运 行 时 多 态【 实 验 目 的 】1 学 习 类 的 继 承 关 系 , 声 明 派 生 类2 熟 悉 不 同 继 承 方 式 下 派 生 类 对 基 类 成 员 的 访 问 限 制3 学 习 多 继 承
9、 的 原 理 , 虚 基 类 的 用 途 及 其 使 用 方 法4 虚 函 数 的 功 能 , 虚 函 数 支 持 面 向 对 象 多 态 机 制 的 工 作 原 理5 学 习 纯 虚 函 数 与 抽 象 基 类 的 定 义 以 及 其 作 用 , 理 解 抽 象 基 类 和 具 体 类的 区 别 。6 基 类 与 派 生 类 构 造 函 数 和 释 构 函 数 的 调 用 顺 序 。7 理 解 基 本 的 设 计 模 式【 实 验 内 容 】1 编 写 一 个 基 类 , 声 明 有 public、 protected、 private 成 员 , 然 后 使 用public 继 承 , p
10、rotected 继 承 , private 继 承 分 别 生 成 派 生 类 , 观 察 派生 类 对 基 类 不 同 类 型 成 员 的 访 问 , 验 证 以 下 继 承 规 则 :1) A public member is accessible from anywhere within a program. 2) A private member can be accessed only by the member functions and friends of its class. 3) A protected member behaves as a public member
11、to a derived class, and behaves as a private member to the rest of the program. 2 有 类 定 义class basepublic:virtual void iam() coutclass Mammalpublic:Mammal():itsAge(2),itsWeight(5)cout #include using namespace std;class list public:struct listelem; /forward declarationsclass iterator;friend iterator;
12、list():h(0), t(0) /construct the empty listlist(size_t n_elements, char c);list(const listlist(iterator b, iterator e);list() release(); iterator begin()const return h; iterator end()const return t;void push_front(char c);void pop_front();charchar11bool empty()const return h = 0;void release();frien
13、d ostream;charoperator listelem*()return ptr; /conversionprivate:listelem* ptr;/current listelem or 0;private:listelem* h, *t; /head and tail;list:list(size_t n_elements, char c)assert(n_elements 0);h = t = 0;for(size_t i = 0; i prev = temp;temp - next = h;h = temp;else /was an empty listh = t = tem
14、p;void list:pop_front()listelem* temp = h;if (h != 0) /was a nonempty listh = h - next;delete temp;else /was an empty listcout next;return *this;list:iterator list:iterator:operator+(int)assert(ptr != 0);iterator temp = *this;ptr = ptr - next;return temp;int main()list l1;l1.push_front(A);l1.push_fr
15、ont(F);l1.push_front(C);l1.push_front(z);l1.push_front(l);cout container. Compute and print the median value. What was expected? Compute the frequencies of each value; in other words, how many 0s were generated, how many 1s were generated, and so forth. Print the value with greatest frequency. Use a
16、 vector to store the frequencies. Be noticed that you should use algorithm, function object and function adapter.14实 验 六 、 异 常 处 理 、 C+ I/O 流【 实 验 目 的 】1 理 解 C+语 言 的 异 常 抛 出 处 理 机 制2 学 习 异 常 处 理 的 声 明 和 执 行 过 程3 学 习 C+中 的 格 式 化 I/O4 掌 握 C+文 件 I/O 流【 实 验 内 容 】1 编 写 计 算 整 数 阶 乘 的 程 序 , 用 异 常 抛 出 处 理 机
17、 制 进 行 输 入 、 溢 出 时 异 常 的处 理 。 在 主 程 序 中 设 置 不 同 条 件 , 观 察 程 序 的 处 理 流 程 。2 Suppose you are given line-oriented data in a file formatted as follows:Australia5E56,7667230284,Langler,Tyson,31.2147,0.000421173612B97,7586701,Oneill,Zeke,553.429,0.00746730531560654D75,7907252710,Nickerson,Kelly,761.612,0.
18、0102762769F2,6882945012,Hartenbach,Neil,47.9637,0.0006471644Austria480F,7187262472,Oneill,Dee,264.012,0.003562260400131B65,4754732628,Haney,Kim,7.33843,0.000099015948475DA1,1954960784,Pascente,Lester,56.5452,0.00076295293F18,1839715659,Elsea,Chelsy,801.901,0.010819887645BelgiumBDF,5993489554,Oneill,
19、Meredith,283.404,0.00382391275AC6,6612945602,Parisienne,Biff,557.74,0.00752547276AD,6477082,Pennington,Lizanne,31.0807,0.00041935444D0E,7861652688,Sisca,Francis,704.751,0.00950906238Bahamas37D8,6837424208,Parisienne,Samson,396.104,0.00534455E98,6384069,Willis,Pam,90.4257,0.001220095640592461462,1288
20、616408,Stover,Hazal,583.939,0.0078789705615FF3,8028775718,Stromstedt,Bunk,39.8712,0.0005379741095,3737212,Stover,Denny,3.05387,0.0000412052488837428,2019381883,Parisienne,Shane,363.272,0.00490155The heading of each section is a region, and every line under that heading is a seller in that region. Ea
21、ch comma-separated field represents the data about each seller. The first field in a line is the SELLER_ID which unfortunately was written out in hexadecimal format. The second is the PHONE_NUMBER (notice that some are missing area codes). LAST_NAME and FIRST_NAME then follow. TOTAL_SALES is the sec
22、ond to the 15last column. The last column is the decimal amount of the total sales that the seller represents for the company. You are to format the data on the terminal window so that an executive can easily interpret the trends. Sample output is given below.Australia-*LastName* *FirstName* *ID* *P
23、hone* *Sales* *Percent* Langler Tyson 24150 766-723-0284 31.24 4.21E-02Oneill Zeke 11159 XXX-758-6701 553.43 7.47E-013 有 磁 盘 文 件 student.txt, 文 件 记 录 格 式 为 :学 号 姓 名 性 别 出 生 年 月 生 源 地 高 考 成 绩修 改 实 验 五 (3)的 链 表 结 构 , 使 其 结 点 能 存 储 student.txt 的 记 录 。 并在 相 应 成 员 函 数 里 加 入 异 常 抛 出 处 理 代 码 。 用 student.tx
24、t 的 所 有 数 据初 始 化 列 表 。 列 表 能 实 现 按 照 高 考 程 序 排 序 , 排 序 后 的 所 有 学 生 纪 录 输 出到 student_sort.txt 中 。附 录 VC 程 序 调 试 (本 部 分 录 自 网 上 资 料 )在 开 发 程 序 的 过 程 中 , 经 常 需 要 查 找 程 序 中 的 错 误 , 这 就 需 要 利 用 调 试 工具 来 帮 助 你 进 行 程 序 的 调 试 , 当 然 目 前 有 许 多 调 试 工 具 , 而 集 成 在 VC中 的 调 试 工 具 以 其 强 大 的 功 能 , 一 定 使 你 爱 不 释 手 。
25、下 面 我 们 先 来 介 绍 VC 中 的调 试 工 具 的 使 用 。1 VC 调 试 工 具11 调试环境的建立在 VC 中 每 当 建 立 一 个 工 程 (Project)时 ,VC 都 会 自 动 建 立 两 个 版 本 :Release 版 本 ,和 Debug 版 本 ,正 如 其 字 面 意 思 所 说 的 , Release 版 本 是 当程 序 完 成 后 ,准 备 发 行 时 用 来 编 译 的 版 本 ,而 Debug 版 本 是 用 在 开 发 过 程 中进 行 调 试 时 所 用 的 版 本 。DEBUG 版 本 当 中 , 包 含 着 MICROSOFT 格 式
26、 的 调 试 信 息 , 不 进 行 任 何 代码 优 化 , 而 在 RELEASE 版 本 对 可 执 行 程 序 的 二 进 制 代 码 进 行 了 优 化 , 但 是 其中 不 包 含 任 何 的 调 试 信 息 。在 新 建 立 的 工 程 中 , 你 所 看 到 是 DEBUG 版 本 , 若 要 选 择 RELEASE 版本 , 可 以 选 择 菜 单 PROJECT 中 的 SETTING 命 令 , 这 时 屏 幕 上 面 弹 出PROJECT SETTEING 对 话 框 , 在 SETTING FOR 下 拉 列 表 中 选 择RELEASE, 按 OK 退 出 ,如 图
27、 4.1。16图 4.1在 调 试 程 序 的 时 候 必 须 使 用 DEBUG 版 本 , 我 们 可 以 在 Project Setting 对 话 框 的 C/C+页 中 设 置 调 试 选 项 。17图 4.2各 个 选 项 的 含 意 如 下 : Program Database 表 示 产 生 一 个 存 储 程 序 信 息 的 数 据 文 件 (.PDB),它 包 含 了 类 型 信 息 和 符 号 化 的 调 试 信 息 ; Line Numbers Only 表 示 程 序 经 过 编 译 和 链 接 产 生 的 .OBJ 或 .EXE文 件 仅 仅 包 含 全 局 和 外
28、 部 符 号 以 及 行 号 信 息 ; C7 Compatible 表 示 产 生 一 个 .OBJ 或 .EXE 文 件 行 号 信 息 以 及 符 号化 的 调 试 信 息 ; None 表 示 不 产 生 任 何 调 试 信 息 。12 调试的一般过程调 试 , 说 到 底 就 是 在 程 序 的 运 行 过 程 的 某 一 阶 段 观 测 程 序 的 状 态 ,而在 一 般 情 况 下 程 序 是 连 续 运 行 的 , 所 以 我 们 必 须 使 程 序 在 某 一 地 点 停 下 来 。 所以 我 们 所 做 的 第 一 项 工 作 就 是 设 立 断 点 。 其 次 ,再 运
29、行 程 序 ,当 程 序 在 设立 断 点 处 停 下 来 时 ,再 利 用 各 种 工 具 观 察 程 序 的 状 态 。 程 序 在 断 点 停 下 来 后 ,有 时 我 们 需 要 按 我 们 的 要 求 控 制 程 序 的 运 行 , 以 进 一 步 观 测 程 序 的 流 向 , 所 以下 面 我 们 依 次 来 介 绍 断 点 的 设 置 , 如 何 控 制 程 序 的 运 行 以 及 各 种 观 察 工 具 的 利用 。13 如何设置断点在 VC 中 , 你 可 以 设 置 多 种 类 型 的 断 点 , 我 们 可 以 根 据 断 点 起 作 用 的 方 式 把这 些 断 点
30、分 为 三 类 :1、 与 位 置 有 关 的 断 点 ; 2、 与 逻 辑 条 件 有 关 的 断 点3、 与 WINDOWS 消 息 有 关 的 断 点 下 面 我 们 分 别 介 绍 这 三 类 断 点 。首 先 我 们 介 绍 与 位 置 有 关 的 断 点 。181、 最 简 单 的 是 设 置 一 般 位 置 断 点 , 你 只 要 把 光 标 移 到 你 要 设 断 点 的 位 置 ,当 然 这 一 行 必 须 包 含 一 条 有 效 语 句 的 ; 然 后 按 工 具 条 上 的add/remove breakpoint 按 钮 或 按 快 捷 键 F9; 这 时 你 将 会
31、在 屏幕 上 看 到 在 这 一 行 的 左 边 出 现 一 个 红 色 的 圆 点 表 示 这 二 设 立 了一 个 断 点 。图 4.32 、 有 的 时 候 你 可 能 并 不 需 要 程 序 每 次 运 行 到 这 儿 都 停 下 来 , 而 是 在 满 足一 定 条 件 的 情 况 下 才 停 下 来 , 这 时 你 就 需 要 设 置 一 种 与 位 置 有 关 的 逻 辑 断 点 。要 设 置 这 种 断 点 我 们 只 需 要 从 EDIT 菜 单 中 选 中 breakpoint 命 令 , 这 时Breakpoint 对 话 框 将 会 出 现 在 屏 幕 上 。 选 中
32、Breakpoint 对 话 框 中 的LOCATION 标 签 , 使 LOCATION 页 面 弹 出 , 如 图 4.419图 4.4单 击 condition 按 钮 , 弹 出 Breakpoint 对 话 框 , 在 Expression 编辑 框 中 写 出 你 的 逻 辑 表 达 式 , 如 X=3 或 a+b25,最 后 按 OK 返 回 。图 4.5这 种 断 点 主 要 是 由 其 位 置 发 生 作 用 的 , 但 也 结 合 了 逻 辑 条 件 , 使 之 更 灵 活 。3、 有 时 我 们 需 要 更 深 入 地 调 试 程 序 , 我 们 需 要 进 入 程 序
33、的 汇 编 代 码 , 因 此我 们 需 要 在 在 汇 编 代 码 上 设 立 断 点 : 要 设 立 这 种 断 点 我 们 只 需 从 View菜 单 中 选 Debug window 命 令 ,20图 4.6再 选 Disassembly 子 命 令 , 这 时 汇 编 窗 口 将 会 出 现 在 屏 幕 上 。图 4.7在 图 4.7 中 的 汇 编 窗 口 中 你 将 看 到 对 应 于 源 程 序 的 汇 编 代 码 , 其 中 源 程 序是 用 黑 体 字 显 示 , 下 面 是 且 对 应 的 汇 编 代 码 。 要 设 立 断 点 , 我 们 只 需 将 光 标 移到 你
34、想 设 断 点 处 然 后 点 击 工 具 条 上 的 Insert/Remove Breakpoints 按 钮 ,此 后 你 将 会 看 到 一 个 红 圆 点 出 现 在 该 汇 编 代 码 的 右 边 。21图 4.8上 面 所 讲 的 断 点 主 要 是 由 于 其 位 置 发 挥 作 用 的 , 即 当 程 序 运 行 到 设 立 断 点 的地 方 时 程 序 将 会 停 下 来 。 但 有 时 我 们 设 立 只 与 逻 辑 条 件 有 关 的 断 点 , 而 与 位 置无 关 。 所 以 下 面 介 绍 一 下 与 逻 辑 条 件 有 关 的 断 点 。( 1) 逻 辑 条 件
35、 触 发 断 点 的 设 置 : 从 EDIT 菜 单 中 选 中 breakpoint 命 令 , 这 时 屏 幕 上 将 会 出 现Breakpoint 对 话 框 。图 4.9 选 中 Breakpoint 对 话 框 中 的 DATA 标 签 , 对 应 的 页 面 将 会 弹 出2324图 4.10 在 图 4.10 的 DATA 页 面 中 的 Expression 编 辑 框 中 写 出 你 的 逻 辑表 达 式 , 如 (X=3);图 4.11 最 后 按 OK 返 回 。其 他 几 种 断 点 的 设 置 的 方 法 都 与 之 类 似 。 我 们 一 一 加 以 说 明 。
36、( 2) 监 视 表 达 式 发 生 变 化 断 点 : 从 EDIT 菜 单 中 选 中 breakpoint 命 令 , 这 时 屏 幕 上 将 会 出 现Breakpoint 对 话 框 。 选 中 Breakpoint 对 话 框 中 的 DATA 标 签 , 对 应 的 页 面 将 会 弹 出 在 Expression 编 辑 框 中 写 出 你 需 要 监 视 的 表 达 式 最 后 按 OK 键 返 回 。( 3) 监 视 数 组 发 生 变 化 的 断 点 : 从 EDIT 菜 单 中 选 中 breakpoint 命 令 , 这 时 屏 幕 上 将 会 出现 Breakpoi
37、nt 对 话 框 。 选 中 Breakpoint 对 话 框 中 的 DATA 标 签 , 对 应 的 页 面 将 会 弹 出 在 Expression 编 辑 框 中 写 出 你 需 要 监 视 数 组 名 ; 在 Number of Elements 编 辑 框 输 入 你 需 要 监 视 数 组 元 素 的 个数 ; 按 OK 键 返 回 。( 4) 监 视 由 指 针 指 向 的 数 组 发 生 变 化 的 断 点 : 从 EDIT 菜 单 中 选 中 breakpoint 命 令 , 这 时 在 屏 幕 上 将 会 出 现Breakpoint 对 话 框 。 选 中 Breakpo
38、int 对 话 框 中 的 DATA 标 签 ; 在 Expression 编 辑 框 中 输 入 形 如 *pointname,其 中*pointname 为 指 针 变 量 名 ; 在 Number of Elements 编 辑 框 输 入 你 需 要 监 视 数 组 元 素 的 个数 ; 按 OK 键 返 回 。( 5) 监 视 外 部 变 量 发 生 变 化 的 断 点 : 从 EDIT 菜 单 中 选 中 breakpoint 命 令 这 时 屏 幕 上 将 会 出 现Breakpoint 对 话 框 ;25 选 中 Breakpoint 对 话 框 中 的 DATA 标 签 ;
39、在 Expression 编 辑 框 中 输 入 变 量 名 ; 点 击 在 Expression 编 辑 框 的 右 边 的 下 拉 键 头 ; 选 取 Advanced 选 项 , 这 时 Advanced Breakpoint 对 话 框 出 现 ; 在 context 框 中 输 入 对 应 的 函 数 名 和 (如 果 需 要 的 话 )文 件 名 ; 按 OK 键 关 闭 Advanced Breakpoint 对 话 框 。 按 OK 键 关 闭 Breakpoints 对 话 框 。( 6) 在 讲 了 位 置 断 点 和 逻 辑 断 点 之 后 我 们 再 讲 一 下 与 W
40、INDOWS 消息 有 关 的 断 点 。注 意 : 此 类 断 点 只 能 工 作 在 x86 或 Pentium 系 统 上 。 从 EDIT 菜 单 中 选 中 breakpoint 命 令 , 这 时 屏 幕 上 将 会 出 现Breakpoint 对 话 框 ; 选 中 Breakpoint 对 话 框 中 的 MESSAGE 标 签 , 对 应 的 页 面 将 会 弹出 ; 在 Break At WndProc 编 辑 框 中 输 入 Windows 函 数 的 名 称 ; 在 Set One Breakpoint From Each Message To Watch 下 拉列 表
41、 框 中 选 择 对 应 的 消 息 ; 按 OK 返 回 。14 控制程序的运行上 面 我 们 讲 了 如 何 设 置 各 类 断 点 , 下 面 我 们 来 介 绍 如 何 控 制 程 序 的 运 行 。 当我 们 从 菜 单 Build 到 子 菜 单 Start Debuging 选 择 Go 程 序 开 始 运 行 在Debug 状 态 下 , 程 序 会 由 于 断 点 而 停 顿 下 来 后 , 可 以 看 到 有 一 个 小 箭 头 , 它 指向 即 将 执 行 的 代 码 。26图 4.12随 后 , 我 们 就 可 以 按 要 求 来 控 制 程 序 的 运 行 : 其 中
42、 有 四 条 命 令 :Step over, step Into , Step Out ,Run to Cursor。图 4.13在 图 4.13 中 :Step over 的 功 能 是 运 行 当 前 箭 头 指 向 的 代 码 (只 运 行 一 条 代 码 )。Step Into 的 功 能 是 如 果 当 前 箭 头 所 指 的 代 码 是 一 个 函 数 的 调 用 , 则 用Step Into 进 入 该 函 数 进 行 单 步 执 行 。Step Out 的 功 能 是 如 当 前 箭 头 所 指 向 的 代 码 是 在 某 一 函 数 内 , 用 它 使 程 序运 行 至 函
43、数 返 回 处 。Run to Cursor 的 功 能 是 使 程 序 运 行 至 光 标 所 指 的 代 码 处 。2715 查看工具的使用调 试 过 程 中 最 重 要 的 是 要 观 察 程 序 在 运 行 过 程 中 的 状 态 , 这 样 我 们 才 能 找出 程 序 的 错 误 之 处 。 这 里 所 说 的 状 态 包 括 各 变 量 的 值 , 寄 存 中 的 值 ,内存 中 的 值 , 堆 栈 中 的 值 , 为 此 我 们 需 要 利 用 各 种 工 具 来 帮 助 我 们 察 看 程 序 的状 态 。 弹 出 式 调 试 信 息 泡 泡 (Data Tips Pop_u
44、p Information)。当 程 序 在 断 点 停 下 来 后 , 要 观 察 一 个 变 量 或 表 达 式 的 值 的 最 容 易 的 方 法 是利 用 调 试 信 息 泡 泡 。 要 看 一 个 变 量 的 值 , 只 需 在 源 程 序 窗 口 中 , 将 鼠 标 放 到 该变 量 上 ,你 将 会 看 到 一 个 信 息 泡 泡 弹 出 , 其 中 显 示 出 该 变 量 的 值 。图 4.14要 查 看 一 个 表 达 式 的 值 , 先 选 中 该 表 达 式 , 仍 后 将 鼠 标 放 到 选 中 的 表 达 式 上 ,同 样 会 看 到 一 个 信 息 泡 泡 弹 出
45、以 显 示 该 表 达 式 的 值 如 图 4.15 所 示 。28图 4.15 变 量 窗 口 (VARIABLE WINDOW)。在 VIEW 菜 单 , Debug window 选 Variables window; 变 量 窗 口 将 出现 在 屏 幕 上 。 其 中 显 示 着 变 量 名 及 其 对 应 的 值 。 你 将 会 看 到 在 变 量 观 察 窗 口 的下 部 有 三 个 标 签 : AUTO ,LOCAL,THIS 选 中 不 同 的 标 签 , 不 同 类 型 的 变 量 将会 显 示 在 该 窗 口 中 。图 4.16 观 察 窗 口 (WATCH WINDOW
46、):29在 VIEW 菜 单 , 选 择 Debug window 命 令 , Watch window 子 命 令 。这 时 变 量 窗 口 将 出 现 在 屏 幕 上 。图 4.17在 图 4.17 的 观 察 窗 口 中 双 击 Name 栏 的 某 一 空 行 , 输 入 你 要 查 看 的 变 量名 或 表 达 式 。图 4.18回 车 后 你 将 会 看 到 对 应 的 值 。 观 察 窗 口 可 有 多 页 , 分 别 对 应 于 标 签Watch1,Watch2,Watch3 等 等 。 假 如 你 输 入 的 表 达 式 是 一 个 结 构 或 是 一 个 对 象 ,你 可
47、以 用 鼠 标 点 取 表 达 式 右 边 的 形 如 + , 以 进 一 步 观 察 其 中 的 成 员 变 量 的值 如 图 4.19。30图 4.19 快 速 查 看 变 量 对 话 框 (quick watch);在快速查看变量对话框中你可以象利用观察窗口一样来查看变量或表达式的值。但我们还可以利用它来该变运行过程中的变量,具体操作如下:( 1) 在 Debug 菜 单 , 选 择 Quick Watch 命 令 , 这 时 屏 幕 上 将 会 出 现Quick Watch 对 话 框 ;图 4.20( 2) 在 Expression 编 辑 框 中 输 入 变 量 名 , 按 回 车 ;