FY.DOC



Similar documents
新版 明解C++入門編

新版 明解C言語入門編

CC213

untitled

c_cpp

新・解きながら学ぶJava

nooog

新・解きながら学ぶC言語

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

新・明解C言語入門編『索引』

Microsoft Word - 01.DOC

提问袁小兵:

untitled

Chapter12 Derived Classes

中 国 中 西 医 结 合 杂 志 年 月 第 卷 第 期!" 通 透 性 增 加 产 生 蛋 白 水 解 酶 促 进 血 管 内 皮 细 胞 有 丝 分 裂 内 皮 细 胞 从 基 底 膜 上 迁 移 到 血 管 周 围 间 隙 粘 附 聚 集 重 构 为 三 维 管 腔 并 与 周 围 血 管

_汪_文前新ok[3.1].doc

untitled

C 1

! "#$ %$ $ 资 料 与 方 法 $ 调 查 对 象 全 国 东 北 华 北 华 东 西 北 西 南 和 中 南 六 个 大 区 个 省 自 治 区 直 辖 市 * 个 城 市 中 的 & 所 医 院 参 加 了 本 次 调 查 各 省 省 会 城 市 的 医 学 院 校 附 属 医 院 省

得 到 了 補 償. 對 於 武 姜 而 言, 莊 公 與 自 己 的 關 係 並 不 親 密, 而 共 叔 段 又 是 自 己 向 來 疼 愛 有 加 的 兒 子, 所 以, 對 莊 公 提 出 再 怎 麼 無 理 的 要 求, 武 姜 也 不 會 覺 得 有 什 麼 不 妥 之 處, 而 對 共

一 耀 州 青 瓷 的 裝 飾 手 法 與 紋 飾 種 類 耀 州 窯 的 裝 飾 紋 樣, 豐 富 多 變, 而 且 題 材 內 容 廣 泛, 組 合 形 式 多 樣, 圖 案 形 象 優 美, 令 人 賞 心 悅 目, 並 且 反 映 了 當 時 社 會 的 審 美 趣 味 和 理 想 裝 飾

1911 年 武 汉 起 义, 广 东 独 立 胡 汉 民 任 总 督, 陈 任 广 东 军 政 府 外 交 部 副 部 长 陈 不 愿 做 官, 几 个 月 后 即 辞 职 1915 年 与 李 煜 堂 设 立 上 海 保 险 公 司, 陈 任 主 席 1921 年 孙 中 山 就 任 非 常 大

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

Ps22Pdf

(procedure-oriented)?? 2

C/C++语言 - C/C++数据

## $%& %& ## () #) (( * (+++ () #) #) (+ (+ #) #) ( #, - #)). #))- # ( / / / / $ # ( * *..# 4 #$ 3 ( 5 ) ### 4 $ # 5, $ ## # 4 $# 5 ( %

! # % % & # # % #!& % &# % &# % % % # %& ( (!& (! & & % % #!! ) %&! *& % %! % %!! # % %!! %*!& % &# % &# ) ) ( % # # ) % ( (!& (! (!! # % % #!! # ( &!

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

untitled

51 C 51 isp 10 C PCB C C C C KEIL

概述

4 中 南 大 学 学 报 医 学 版 摘 要 目 的 探 讨 早 发 性 精 神 分 裂 症 患 者 在 静 息 状 态 下 是 否 存 在 脑 功 能 连 接 异 常 以 及 异 常 区 域 的 定 位 方 法 采 用 第 版 美 国 精 神 障 碍 诊 断 与 统 计 手 册 ( * ) (

C/C++程序设计 - 字符串与格式化输入/输出

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

CHAPTER VC#

Microsoft PowerPoint - OPVB1基本VB.ppt


<4D F736F F D20B2C43032B3B920B8EAAEC6ABACBA41BB50AAEDA5DCA6A12E646F63>

Microsoft Word - 第3章.doc

《C语言程序设计》教材习题参考答案

untitled

02

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2

全国计算机技术与软件专业技术资格(水平)考试

第 期 邸 志 欣 等! 复 杂 山 前 带 地 震 勘 探 采 集 技 术 的 实 践 与 认 识 " 剧 烈 以 上 条 件 给 山 前 带 地 震 采 集 观 测 系 统 设 计 及 炮 检 点 布 设 地 震 波 激 发 接 收 噪 声 压 制 静 校 正 处 理 等 带 来 了 诸 多 问

(\244j\257d\276\307\274\351_ C.indd_70%.pdf)

C/C++ - 文件IO

C/C++ - 字符输入输出和字符确认

<4D F736F F D20A4D5A46CA1D0A740A4E5A5FEB6B02E646F63>

Microsoft Word - d.doc

untitled

科学计算的语言-FORTRAN95

CHAPTER 1

Java

理 L~ 胆 有 纪 嚣 中 国 共 产 党 早 期 的 主 要 领 导 人, 伟 大 的 马 克 思 主 义 者, 卓 越 的 无 产 阶 级 革 命 家 理 论 家 和 宣 传 家, 中 国 革 命 文 学 事 业 的 重 要 奠 基 人 一 一 瞿 秋 白 同 志 诞 辰 110 周 年 暨

zt

Microsoft Word 軟體設計第二部份範例試題_C++_ _1_.doc

第3章.doc

untitled

.' 6! "! 6 "'' 6 7% $! 7%/'& 人 类 非 洲 锥 虫 病 又 称 昏 睡 病 是 布 氏 锥 虫 冈 比 亚 亚 种!! 或 布 氏 锥 虫 罗 得 西 亚 种 "#$$ %! &'!!! 感 染 引 起 的 一 种 寄 生 虫 病 以 采 采 蝇! 为 传 播 ' 媒

第 期 熊 安 萍 等 *1$ 文 件 系 统 中 范 围 锁 机 制 的 应 用 研 究! 锁 命 名 空 间 '+'($($ 描 述 了 资 源 和 锁 的 集 合 它 同 时 在 客 户 节 点 和 服 务 节 点 存 在 不 同 之 处 只 是 利 用 一 个 数 据 标 识 来 有 效 区

# # # # # # # # # % # & # & # # # () # (( # * * (( # (+ # ( (# # (# # (# # ( # ( +) (

, 2., 3., , 3.,,

24 第 3 章 创 建 Access 数 据 库 和 表 3.1 创 建 Access 数 据 库 Access 2003 中 的 数 据 库 属 于 关 系 型 数 据 库, 以.mdb 为 文 件 的 后 缀, 建 立 一 个 数 据 库 的 同 时, 就 创 建 了 数 据 库 中 的 对

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Microsoft PowerPoint - plan06.ppt

untitled


/0/ "!!!!! " "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " # $ % && $ $ $ $ ( $ $ ( $ ) % * ( * $ $ $ $ $ $ $ ( $ $ $ $ $ # ( $ $ ( $ $ $ ( $ $ $ $

(2) 廠 商 具 有 維 修 維 護 或 售 後 服 務 能 力 之 證 明 ;(3) 廠 商 具 有 製 造 供 應 或 承 做 能 力 之 證 明 ;(4) 具 有 相 當 人 力 之 證 明 屬 特 定 資 格 之 ㄧ 8.(3) 機 關 辦 理 預 算 金 額 為 新 台 幣 四 億 元

论 文 :?,,,,,,,,,, (, ),, ( ),,,,,,,, (, ) : (, ),,, :,, ;,,,,


untitled

口 的 70% 连 南 县 的 瑶 族. 有 排 瑶 过 山 瑶 排 瑶 6 万 多 人 住 在 三 排 南 岗 i 雨 水 大 麦 山 大 坪 香 坪 盘 石 金 坑 8 个 乡 镇. 形 成 了 占 全 县 面 积 80% 的 聚 居 地 << 连 州 志 } 卷 八 排 瑶 志 曰 在 连 者

第 一 部 分 增 城 区 人 力 资 源 和 社 会 保 障 局 概 况 一 广 州 市 增 城 区 人 力 资 源 和 社 会 保 障 局 主 要 职 能 广 州 市 增 城 区 人 力 资 源 和 社 会 保 障 局 是 区 委 区 政 府 主 管 人 事 人 才 劳 动 社 会 保 障 的

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

星宿對中國古代軍事的影響

untitled

Microsoft Word cppFinalSolution.doc

年 第 期 许 德 刚 基 于 遗 忘 因 子 -./ 算 法 的 自 适 应 直 达 波 对 消 技 术 * 达 站 周 围 的 环 境 可 能 比 较 复 杂 来 自 近 距 离 不 同 固 定 物 体 所 反 射 的 多 径 信 号 也 强 于 回 波 信 号 大 大 影 响 了 雷 达 的

二O一四年大华府拖拉机游戏锦标赛规则

Ps22Pdf

动 物 中 能 促 进 但 会 在 表 达 的 物 种 中 产 生 不 良 反 应 如 引 起 脂 肪 肝 或 升 高 74-4 水 平 2 # ) 9 等 建 立 血 脂 异 常 和 肝 硬 化 仓 鼠 模 型 进 行 研 究 结 果 表 明 7'&$ 不 能 改 善 血 脂 异 常 和 肝 硬

CC213

(京)新登字063号

年 中 央 国 家 机 关 政 府 采 购 中 心 网 上 竞 价 品 目 表 中 央 国 家 机 关 政 府 采 购 中 心 2016 年 7 月 21 日 - 2 -

epub83-1

<4D F736F F D20B2C4A4BBA9A1B8EAB054BAD8A46C2DB773BB44B443C5E9B27BAA70B56FAE69BB50A5BCA8D3B773C1CDB6D5BDD2ABE1A4DFB16F>

ebook8-30

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

幻灯片 1

ebook50-15

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

Chapter 9: Objects and Classes

VB程序设计教程

北魏山东佛教文化个案研究


Transcription:

高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社

内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主 要 内 容 包 括 C++ 语 言 基 础 知 识 基 本 数 据 类 型 和 表 达 式 函 数 数 组 结 构 体 和 共 用 体 指 针 和 应 用 类 与 数 据 抽 象 运 算 符 重 载 继 承 性 虚 函 数 和 多 态 C++ 输 入 输 出 流 文 件 处 理 本 书 内 容 丰 富, 概 念 清 楚, 实 例 丰 富, 注 重 基 础 知 识 与 典 型 应 用 的 结 合, 系 统 性 和 应 用 性 强, 是 作 者 多 年 教 学 和 实 践 经 验 的 结 晶 本 书 语 言 通 俗 易 懂, 深 入 浅 出, 力 求 突 出 重 点, 强 调 实 际 应 用 书 中 所 有 程 序 全 部 在 Visual C++ 6.0 环 境 下 运 行 通 过 本 书 适 合 作 为 高 职 高 专 计 算 机 及 其 相 关 专 业 学 习 程 序 设 计 语 言 课 程 的 教 材, 也 可 作 为 广 大 计 算 机 应 用 人 员 的 自 学 参 考 书 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 主 编 邓 振 杰 副 主 编 贾 振 华 孟 庆 敏 责 任 编 辑 潘 春 燕 人 民 邮 电 出 版 社 出 版 发 行 北 京 市 崇 文 区 夕 照 寺 街 14 号 邮 编 100061 电 子 函 件 315@ptpress.com.cn 网 址 http://www.ptpress.com.cn 读 者 热 线 010-67129259 北 京 顺 义 振 华 印 刷 厂 印 刷 新 华 书 店 总 店 北 京 发 行 所 经 销 开 本 :787 1092 1/16 印 张 :15.75 字 数 :374 千 字 2004 年 12 月 第 1 版 印 数 :1 000 册 2004 年 12 月 北 京 第 1 次 印 刷 ISBN 7-115-12988-6/TP 2230

编 者 的 话 伴 随 计 算 机 技 术 的 飞 速 发 展, 计 算 机 应 用 的 范 围 越 来 越 广, 计 算 机 普 及 的 程 度 越 来 越 深 入, 致 使 软 件 系 统 的 规 模 和 复 杂 性 急 剧 膨 胀, 传 统 的 面 向 过 程 程 序 设 计 已 不 能 满 足 社 会 发 展 的 需 要 巨 大 的 需 求 引 发 了 软 件 技 术 革 命, 诞 生 了 面 向 对 象 程 序 设 计 的 思 想 和 方 法 C++ 是 当 今 较 为 流 行 的 一 种 面 向 对 象 程 序 设 计 语 言, 完 全 兼 容 C 语 言, 具 有 高 效 灵 活 功 能 强 大 及 可 重 用 性 好 等 特 点 使 用 C++ 语 言 进 行 程 序 设 计 更 方 便, 软 件 维 护 更 容 易 本 书 是 作 者 在 多 年 从 事 C++ 程 序 设 计 教 学 的 基 础 上 编 写 的, 凝 聚 了 作 者 多 年 教 学 和 科 研 的 经 验 与 体 会, 具 有 很 强 的 实 用 性 和 可 读 性 本 书 针 对 学 生 在 学 习 过 程 中 容 易 出 现 的 问 题 进 行 讲 解, 通 过 大 量 程 序 示 例 进 行 启 发 式 教 学, 重 点 培 养 学 生 分 析 问 题 和 解 决 问 题 的 能 力 本 书 根 据 高 职 高 专 的 教 学 特 点, 力 求 语 言 通 俗 易 懂, 概 念 明 确, 尽 量 避 免 枯 燥 的 理 论 讲 授, 力 争 将 复 杂 的 概 念 示 例 化, 将 抽 象 的 理 论 形 象 化, 用 大 量 的 程 序 示 例 来 帮 助 读 者 理 解 概 念 和 理 论, 使 读 者 逐 步 掌 握 C++ 语 言 的 完 整 体 系 本 书 内 容 全 面, 在 内 容 安 排 上 由 浅 入 深, 从 最 简 单 的 概 念 开 始, 循 序 渐 进, 突 出 实 用 性, 使 读 者 在 学 完 本 书 后 能 够 真 正 学 以 致 用 本 书 选 材 适 当, 定 位 准 确, 示 例 丰 富, 重 点 突 出, 书 中 给 出 的 所 有 例 题 程 序 均 在 Visual C++ 6.0 集 成 环 境 中 运 行 通 过 本 书 还 可 以 提 供 电 子 教 案 和 所 有 程 序 的 源 代 码 全 书 以 介 绍 C++ 语 言 面 向 对 象 程 序 设 计 的 思 想 和 方 法 为 主, 共 12 章, 主 要 内 容 包 括 C++ 语 言 概 述 基 本 数 据 类 型 和 表 达 式 函 数 数 组 结 构 体 和 共 用 体 指 针 和 引 用 类 和 数 据 抽 象 运 算 符 重 载 继 承 性 虚 函 数 和 多 态 性 C++ 输 入 输 出 流 文 件 处 理 等 本 书 由 邓 振 杰 担 任 主 编, 贾 振 华 孟 庆 敏 任 副 主 编 各 章 编 写 分 工 如 下 : 第 1 2 5 6 章 由 邓 振 杰 编 写, 第 4 章 由 陈 征 峰 编 写, 第 3 7 8 9 10 章 由 贾 振 华 编 写, 第 11 和 12 章 由 孟 庆 敏 编 写, 斯 庆 巴 拉 金 永 涛 曲 凤 娟 邵 温 刘 立 媛 王 静 和 李 京 辉 也 参 加 了 部 分 内 容 的 编 写 以 及 大 纲 讨 论 和 文 稿 整 理 工 作 全 书 由 邓 振 杰 负 责 统 稿 由 于 作 者 水 平 有 限, 书 中 难 免 出 现 一 些 错 误 和 不 妥 之 处, 敬 请 读 者 批 评 指 正 编 者 2005 年 1 月

目 录 第 1 章 C++ 概 述 1 1.1 面 向 对 象 程 序 设 计 1 1.1.1 基 本 概 念 1 1.1.2 传 统 程 序 设 计 及 其 局 限 性 3 1.1.3 面 向 对 象 程 序 设 计 及 其 优 点 4 1.1.4 面 向 对 象 程 序 设 计 的 特 点 6 1.1.5 面 向 对 象 程 序 设 计 语 言 的 发 展 7 1.2 C++ 的 发 展 和 特 点 8 1.2.1 C++ 的 发 展 8 1.2.2 C++ 的 特 点 9 1.2.3 C++ 与 C 语 言 的 关 系 9 1.3 C++ 程 序 基 本 结 构 10 1.3.1 C++ 程 序 基 本 结 构 10 1.3.2 C++ 程 序 的 书 写 格 式 11 1.4 C++ 程 序 的 上 机 实 现 11 1.4.1 编 辑 12 1.4.2 编 译 12 1.4.3 连 接 12 1.4.4 运 行 12 习 题 17 第 2 章 基 本 数 据 类 型 和 表 达 式 18 2.1 词 法 符 号 18 2.1.1 标 识 符 18 2.1.2 关 键 字 18 2.1.3 常 量 19 2.1.4 运 算 符 19 2.1.5 分 隔 符 19 2.2 基 本 数 据 类 型 19 2.3 常 量 与 变 量 20 2.3.1 常 量 21 2.3.2 变 量 23 2.4 运 算 符 和 表 达 式 24

2 C++ 程 序 设 计 2.4.1 运 算 符 24 2.4.2 表 达 式 28 2.5 控 制 语 句 32 2.5.1 表 达 式 语 句 32 2.5.2 复 合 语 句 32 2.5.3 选 择 语 句 32 2.5.4 循 环 语 句 36 2.5.5 转 移 语 句 39 习 题 41 第 3 章 函 数 43 3.1 函 数 的 定 义 43 3.1.1 函 数 定 义 43 3.1.2 函 数 原 型 44 3.2 函 数 调 用 45 3.2.1 函 数 调 用 的 概 念 45 3.2.2 函 数 调 用 的 参 数 传 递 46 3.2.3 函 数 的 嵌 套 调 用 和 递 归 调 用 49 3.2.4 函 数 main() 的 参 数 53 3.3 局 部 变 量 和 全 局 变 量 54 3.3.1 局 部 变 量 54 3.3.2 全 局 变 量 54 3.4 内 联 函 数 55 3.5 函 数 重 载 56 习 题 57 第 4 章 数 组 61 4.1 一 维 数 组 的 定 义 和 数 组 元 素 的 引 用 61 4.1.1 一 维 数 组 的 定 义 61 4.1.2 一 维 数 组 的 初 始 化 61 4.1.3 一 维 数 组 元 素 的 引 用 62 4.1.4 一 维 数 组 的 使 用 62 4.2 二 维 数 组 的 定 义 和 数 组 元 素 的 引 用 64 4.2.1 二 维 数 组 的 定 义 64 4.2.2 二 维 数 组 元 素 的 初 始 化 65 4.2.3 二 维 数 组 元 素 的 引 用 66 4.2.4 二 维 数 组 的 使 用 66 4.3 字 符 数 组 68 4.3.1 字 符 数 组 的 定 义 及 初 始 化 68

目 录 3 4.3.2 字 符 串 处 理 函 数 69 4.3.3 字 符 数 组 的 应 用 71 习 题 72 第 5 章 结 构 体 和 共 用 体 74 5.1 结 构 体 74 5.1.1 结 构 体 的 定 义 74 5.1.2 结 构 体 变 量 的 定 义 75 5.1.3 结 构 体 变 量 的 初 始 化 76 5.1.4 结 构 体 变 量 的 使 用 76 5.1.5 结 构 体 数 组 77 5.2 共 用 体 82 5.2.1 共 用 体 共 用 体 变 量 的 定 义 83 5.2.2 共 用 体 变 量 的 使 用 84 习 题 85 第 6 章 指 针 和 引 用 86 6.1 指 针 86 6.1.1 指 针 的 概 念 86 6.1.2 指 针 与 数 组 92 6.1.3 指 针 与 字 符 串 97 6.1.4 指 针 与 函 数 98 6.1.5 动 态 内 存 分 配 101 6.2 引 用 104 6.2.1 引 用 的 概 念 104 6.2.2 引 用 与 函 数 105 习 题 107 第 7 章 类 与 数 据 抽 象 109 7.1 类 的 定 义 109 7.2 对 象 的 定 义 112 7.2.1 对 象 的 定 义 112 7.2.2 对 象 成 员 的 表 示 方 法 112 7.3 构 造 函 数 和 析 构 函 数 113 7.3.1 构 造 函 数 和 析 构 函 数 113 7.3.2 缺 省 构 造 函 数 和 缺 省 析 构 函 数 116 7.3.3 拷 贝 初 始 化 构 造 函 数 117 7.4 成 员 函 数 的 特 征 119 7.4.1 成 员 函 数 的 重 载 119

4 C++ 程 序 设 计 7.4.2 参 数 的 缺 省 值 120 7.5 静 态 成 员 122 7.5.1 静 态 数 据 成 员 122 7.5.2 静 态 成 员 函 数 124 7.6 友 元 126 7.6.1 友 元 函 数 126 7.6.2 友 元 类 128 7.7 对 象 的 指 针 和 对 象 的 引 用 129 7.7.1 对 象 的 指 针 129 7.7.2 this 指 针 132 7.7.3 对 象 引 用 133 7.8 对 象 数 组 134 7.9 常 类 型 137 7.9.1 常 指 针 和 常 引 用 137 7.9.2 常 成 员 函 数 138 7.9.3 常 数 据 成 员 139 习 题 140 第 8 章 运 算 符 重 载 147 8.1 概 述 147 8.2 运 算 符 重 载 的 一 般 规 则 147 8.3 一 些 特 殊 操 作 符 的 重 载 148 8.3.1 一 元 运 算 符 重 载 148 8.3.2 二 元 运 算 符 重 载 151 习 题 154 第 9 章 继 承 性 157 9.1 基 类 和 派 生 类 157 9.1.1 派 生 类 的 定 义 157 9.1.2 继 承 方 式 158 9.2 单 继 承 159 9.2.1 单 继 承 中 的 成 员 访 问 权 限 159 9.2.2 构 造 函 数 和 析 构 函 数 161 9.3 多 继 承 164 9.3.1 多 继 承 的 概 念 164 9.3.2 多 继 承 的 构 造 函 数 和 析 构 函 数 166 9.3.3 二 义 性 问 题 168 9.4 虚 基 类 169 9.4.1 虚 基 类 的 引 入 和 说 明 169

目 录 5 9.4.2 虚 基 类 的 构 造 函 数 170 9.4.3 虚 基 类 的 应 用 171 习 题 174 第 10 章 虚 函 数 和 多 态 性 178 10.1 虚 函 数 178 10.1.1 虚 函 数 的 定 义 178 10.1.2 纯 虚 函 数 180 10.2 抽 象 类 181 10.3 虚 析 构 函 数 182 10.4 多 态 184 10.4.1 多 态 的 含 义 184 10.4.2 多 态 的 应 用 185 习 题 187 第 11 章 C++ 输 入 / 输 出 流 190 11.1 输 入 / 输 出 流 的 概 念 190 11.2 输 出 流 191 11.2.1 基 本 输 出 操 作 191 11.2.2 输 出 格 式 控 制 197 11.3 输 入 流 203 11.3.1 基 本 输 入 操 作 203 11.3.2 输 入 格 式 控 制 208 习 题 208 第 12 章 文 件 处 理 210 12.1 文 件 简 介 210 12.2 文 件 和 流 211 12.3 顺 序 文 件 的 访 问 212 12.3.1 建 立 顺 序 访 问 文 件 212 12.3.2 读 取 顺 序 文 件 中 的 数 据 215 12.3.3 更 新 顺 序 文 件 中 的 数 据 217 12.4 随 机 文 件 的 访 问 218 12.4.1 建 立 随 机 访 问 文 件 218 12.4.2 读 取 随 机 文 件 中 的 数 据 220 12.4.3 数 据 写 入 随 机 文 件 221 习 题 222 第 13 章 实 训 223

6 C++ 程 序 设 计 13.1 实 训 1 熟 悉 Visual C++ 6.0 集 成 开 发 环 境 223 13.2 实 训 2 简 单 C++ 程 序 设 计 227 13.3 实 训 3 控 制 语 句 232 13.4 实 训 4 函 数 的 应 用 233 13.5 实 训 5 数 组 的 使 用 234 13.6 实 训 6 结 构 体 和 共 用 体 235 13.7 实 训 7 指 针 的 使 用 235 13.8 实 训 8 类 与 数 据 抽 象 236 13.9 实 训 9 运 算 符 重 载 236 13.10 实 训 10 继 承 性 和 派 生 237 13.11 实 训 11 虚 函 数 和 多 态 性 237 13.12 实 训 12 输 入 / 输 出 流 238 13.13 实 训 13 文 件 处 理 239 参 考 文 献 240

1 章 C++ 概 述 20 世 纪 90 年 代 以 来, 面 向 对 象 程 序 设 计 (Object Oriented Programming,OOP) 成 为 计 算 机 程 的 主 流, 其 设 计 思 想 已 经 被 越 来 越 多 的 软 件 设 计 人 员 所 接 受 C++ 语 言 完 全 兼 容 C 语 言, 不 仅 C 语 言 灵 活 高 效 功 能 强 大 和 可 移 植 性 好 等 优 点, 而 且 引 入 了 面 向 对 象 程 序 设 计 的 思 想 和 机 制, 大 程 度 地 提 高 编 程 能 力, 减 少 软 件 维 护 的 开 销, 增 强 软 件 的 可 扩 展 性 和 可 重 用 性 因 此,C++ 出 现 就 受 到 了 广 大 用 户 的 青 睐, 版 本 不 断 更 新, 功 能 不 断 完 善, 迅 速 成 为 面 向 对 象 程 序 设 计 的 言 1.1 面 向 对 象 程 序 设 计 1.1.1 基 本 概 念 1. 对 象 现 实 世 界 中 客 观 存 在 的 任 何 事 物 都 可 以 称 之 为 对 象, 它 可 以 是 有 形 的 具 体 事 物, 如 一 本 书 一 或 一 辆 汽 车 等, 也 可 以 是 一 个 无 形 的 抽 象 事 物, 如 一 次 演 出 或 一 场 球 赛 等 对 象 是 构 成 世 界 的 立 单 位, 可 以 很 简 单, 也 可 以 很 复 杂, 复 杂 的 对 象 可 以 由 简 单 的 对 象 构 成 现 实 世 界 中 的 对 象 既 具 有 静 态 的 属 性 ( 或 称 状 态 ), 又 具 有 动 态 的 行 为 ( 或 称 操 作 ) 例 如, 每 有 姓 名 性 别 年 龄 身 高 和 体 重 等 属 性, 都 有 吃 饭 走 路 睡 觉 和 学 习 等 行 为 所 以, 现 实 的 对 象 一 般 可 以 表 示 为 : 属 性 + 行 为 现 实 世 界 中 的 对 象 一 般 具 有 以 下 特 性 (1) 每 一 个 对 象 必 须 有 一 个 名 字 以 区 别 于 其 他 对 象 (2) 用 属 性 来 描 述 对 象 的 某 些 特 征 (3) 有 一 组 操 作, 每 个 操 作 决 定 对 象 的 一 种 行 为 在 面 向 对 象 程 序 设 计 中, 对 象 是 由 对 象 名 一 组 属 性 数 据 和 一 组 操 作 封 装 在 一 起 构 成 的 实 体 性 数 据 是 对 象 固 有 特 征 的 描 述, 操 作 是 对 这 些 属 性 数 据 施 加 的 动 态 行 为, 是 一 系 列 的 实 现 步 骤 称 之 为 方 法 对 象 通 过 封 装 实 现 了 信 息 隐 藏, 对 象 与 外 部 是 通 过 操 作 接 口 联 系 的, 操 作 的 具 体 实 现 步 骤 外 部 见 的 封 装 的 目 的 就 是 防 止 非 法 访 问, 操 作 接 口 提 供 了 这 个 对 象 所 具 有 的 功 能 打 个 形 象 的 比 喻, 一 个 对 象 就 好 比 一 台 录 音 机 人 们 使 用 录 音 机 时 通 过 播 放 录 音 暂 停 停 止 以 及 快 退 等 按 键 就 可 以 操 作 录 音 机, 录 音 机 就 会 完 成 相 应 的 工 作 人 们 通 过 安 装 在 录 音 机 表 面

C++ 程 序 设 计 音 机 所 具 有 的 功 能, 我 们 只 能 借 助 于 这 些 按 键 实 现 对 录 音 机 的 操 作 如 果 把 对 象 看 作 录 音 机, 则 录 音 机 的 功 率 声 道 数 及 电 源 电 压 等 就 相 当 于 对 象 的 属 性, 放 音 暂 停 等 动 作 就 相 当 于 对 象 的 操 作, 而 它 的 按 键 就 相 当 于 对 象 的 接 口 事 实 上, 操 作 和 属 性 数 据 在 对 象 内 部 的, 一 个 对 象 就 相 当 于 一 个 黑 盒 子, 表 示 对 象 特 征 的 属 性 数 据 和 实 现 对 象 操 作 的 代 装 在 这 个 黑 盒 子 里 面, 外 界 是 看 不 见 的, 更 不 能 从 外 面 去 访 问 和 修 改 这 些 数 据 和 代 码 当 在 程 序 设 计 中 使 用 对 象 时, 只 能 通 过 对 象 与 外 部 的 接 口 来 操 作 它, 接 口 就 是 对 象 对 外 公 开 的 就 像 只 能 通 过 按 键 来 操 作 录 音 机 一 样 这 样 不 仅 使 对 象 的 操 作 变 得 简 单 方 便, 而 且 具 有 很 高 性 和 可 靠 性 2. 类 在 现 实 世 界 中, 类 是 一 组 具 有 相 同 属 性 和 操 作 的 对 象 的 抽 象 例 如, 张 三 李 四 和 王 五 等 是 一 体 的 人, 虽 然 每 个 人 的 性 格 爱 好 相 貌 及 职 业 等 各 不 相 同, 但 他 们 的 基 本 特 征 都 是 相 同 的, 相 似 的 生 理 构 造 和 动 作 行 为 ( 吃 饭 睡 觉 和 说 话 等 ), 故 可 以 把 他 们 统 称 为 人 类, 而 张 三 王 五 等 每 一 个 人 只 是 人 类 的 一 个 实 例 对 象 类 和 对 象 之 间 是 抽 象 与 具 体 的 关 系, 类 是 对 很 多 的 对 象 进 行 抽 象 的 结 果, 一 个 对 象 是 类 的 一 个 例 如, 汽 车 是 一 个 类, 它 是 由 成 千 上 万 个 具 体 的 汽 车 抽 象 而 来 的 一 般 概 念, 而 桑 塔 纳 200 以 看 作 是 汽 车 类 的 一 个 实 例 对 象 在 面 向 对 象 程 序 设 计 中, 类 是 具 有 相 同 属 性 数 据 和 操 作 的 对 象 的 集 合, 它 是 对 一 类 对 象 的 抽 象 类 是 创 建 对 象 的 模 板, 它 包 含 着 所 创 建 对 象 的 状 态 描 述 和 方 法 的 定 义, 一 般 是 先 声 明 类, 再 由 其 对 象 按 照 这 个 模 板 创 建 的 一 个 个 具 体 的 实 例, 就 是 对 象 这 个 过 程 就 好 像 用 木 模 来 制 作 月, 把 事 先 揉 好 的 面 塞 进 木 模 里, 将 木 模 反 扣 在 桌 上, 一 个 漂 亮 的 图 案 就 出 现 在 月 饼 上, 这 样, 模 就 可 以 制 造 出 一 个 个 图 案 一 模 一 样 的 月 饼 这 个 木 模 就 好 比 是 类, 一 个 一 个 的 月 饼 就 好 比 建 的 一 个 个 对 象 3. 消 息 现 实 世 界 中 的 对 象 不 是 一 个 个 孤 立 的 实 体, 它 们 之 间 存 在 着 各 种 各 样 的 联 系 同 样, 在 面 向 对 设 计 中, 对 象 之 间 也 需 要 联 系, 我 们 称 为 对 象 的 交 互 在 面 向 对 象 程 序 设 计 中, 当 要 求 一 个 对 象 做 某 一 操 作 时, 就 向 该 对 象 发 送 一 个 相 应 的 消 息 一 向 另 一 个 对 象 发 出 的 请 求 被 称 为 消 息 当 对 象 接 收 到 发 给 它 的 消 息 时, 就 调 用 有 关 的 方 法, 应 的 操 作 这 种 对 象 与 对 象 之 间 通 过 消 息 进 行 相 互 联 系 的 机 制, 就 叫 做 消 息 传 递 机 制 面 向 对 设 计 通 过 消 息 传 递 来 实 现 对 象 的 交 互 4. 方 法 方 法 就 是 对 象 所 能 执 行 的 操 作 方 法 包 括 接 口 和 方 法 体 两 部 分 方 法 的 接 口 就 是 消 息 的 模 式 诉 用 户 如 何 调 用 该 方 法 ; 方 法 体 则 是 实 现 操 作 的 一 系 列 步 骤, 也 就 是 一 段 程 序 代 码 消 息 和 方 法 的 关 系 是 : 对 象 接 收 到 其 他 对 象 的 消 息, 就 调 用 相 应 的 方 法 ; 反 之, 有 了 合 适 的 方 法 才 能 响 应 相 应 的 消 息 所 以, 消 息 模 式 和 方 法 接 口 应 该 是 一 致 的, 只 要 方 法 接 口 保 持 不 变, 方 改 变 就 不 会 影 响 方 法 的 调 用

第 1 章 C++ 概 述 3 1.1.2 传 统 程 序 设 计 及 其 局 限 性 20 世 纪 50 年 代 初 的 程 序 都 是 用 机 器 语 言 和 汇 编 语 言 编 写 的, 使 程 序 设 计 相 当 麻 烦, 严 重 影 响 机 的 普 及 应 用 20 世 纪 50 年 代 中 期 出 现 了 高 级 程 序 设 计 语 言 FORTRAN, 它 在 计 算 机 程 序 设 计 语 言 发 展 史 上 时 代 的 意 义 该 语 言 引 进 了 许 多 重 要 的 程 序 设 计 概 念, 如 变 量 数 组 循 环 及 条 件 分 支 等 但 是 言 在 使 用 中 也 发 现 了 一 些 不 足, 例 如 不 同 部 分 的 相 同 变 量 名 容 易 发 生 混 淆 等 20 世 纪 50 年 代 后 期, 高 级 语 言 Algol 60 的 设 计 者 决 定 在 程 序 段 内 部 对 变 量 实 行 隔 离, 提 出 了 的 思 想, 由 Begin End 来 实 现 块 结 构, 这 样 此 块 内 的 变 量 就 不 会 和 其 他 块 内 的 同 名 变 量 混 淆 据 实 行 了 保 护 后 来, 随 着 计 算 机 应 用 的 日 益 广 泛, 一 系 列 不 同 风 格 的 为 不 同 对 象 服 务 的 程 序 设 计 语 言 出 现 了 COBOL 和 Pascal 等 高 级 语 言 的 蓬 勃 发 展, 促 使 编 译 和 形 式 语 言 理 论 日 趋 完 善 但 就 整 个 程 序 法 而 言, 并 无 实 质 性 的 突 破 20 世 纪 60 年 代 末 到 70 年 代 初, 出 现 了 大 型 的 软 件 系 统, 如 操 作 数 据 库 管 理 系 统 等, 这 给 程 序 设 计 带 来 了 许 多 新 的 问 题 大 型 软 件 系 统 的 研 制 需 要 花 费 大 量 的 物 力, 但 编 写 出 来 的 软 件 可 靠 性 差, 错 误 多, 难 以 维 护, 已 经 到 了 程 序 员 无 法 控 制 的 地 步, 于 了 软 件 危 机 1969 年,E.W.Dijkstra 首 先 提 出 了 结 构 化 程 序 设 计 的 概 念, 他 强 调 了 从 程 序 结 构 和 风 格 上 序 设 计, 对 软 件 危 机 起 了 很 大 的 缓 解 作 用 结 构 化 程 序 设 计 的 程 序 代 码 是 按 顺 序 执 行 的, 完 整 的 控 制 结 构, 函 数 之 间 的 参 数 按 一 定 规 则 传 递, 不 提 倡 使 用 全 局 变 量, 程 序 设 计 的 首 要 问 设 计 过 程 因 此, 结 构 化 程 序 设 计 仍 是 面 向 过 程 的 程 序 设 计 到 20 世 纪 70 年 代 末, 结 构 化 程 序 设 计 方 法 有 了 很 大 的 发 展, 但 由 于 程 序 规 模 越 来 越 大, 数 据 这 些 数 据 的 方 法 之 间 的 分 离 往 往 使 程 序 变 得 难 以 理 解, 单 纯 的 面 向 过 程 的 程 序 设 计 不 适 宜 于 大 序 开 发, 已 不 能 满 足 要 求, 因 此 出 现 了 模 块 化 程 序 设 计 模 块 化 程 序 设 计 将 软 件 划 分 成 若 干 个 可 单 独 命 名 和 编 址 的 部 分, 称 之 为 模 块 模 块 化 程 序 设 计 思 路 是 自 顶 向 下, 逐 步 求 精, 其 程 序 结 构 是 按 功 能 划 分 成 若 干 个 基 本 模 块, 各 模 块 之 间 尽 可 能 简 单, 在 功 能 上 相 对 独 立 模 块 和 模 块 之 间 隔 离, 其 他 模 块 不 能 访 问 这 个 模 块 的 内 部 信 息 些 信 息 对 模 块 外 部 是 不 透 明 的, 只 能 通 过 严 格 定 义 的 接 口 对 模 块 进 行 访 问 模 块 化 程 序 设 计 将 数 据 结 构 和 相 应 算 法 集 中 在 一 个 模 块 中, 提 出 了 数 据 结 构 + 算 法 = 程 序 设 计 序 设 计 方 法 模 块 化 能 够 有 效 地 管 理 和 维 护 软 件 研 发, 能 够 有 效 地 分 解 和 处 理 复 杂 问 题, 这 使 化 程 序 设 计 方 法 普 遍 被 人 们 接 受 但 它 仍 是 一 种 面 向 过 程 的 程 序 设 计 方 法, 程 序 员 必 须 时 刻 考 处 理 数 据 的 格 式, 对 不 同 格 式 的 数 据 做 相 同 处 理 或 对 相 同 数 据 格 式 做 不 同 处 理 都 要 重 新 编 程, 重 用 性 不 好 综 上 所 述, 随 着 计 算 机 技 术 大 规 模 地 推 广, 人 们 对 计 算 机 软 件 的 功 能 要 求 越 来 越 多, 对 软 件 的 求 越 来 越 高, 传 统 的 程 序 设 计 已 不 能 满 足 这 些 日 益 增 长 的 需 要, 其 局 限 性 主 要 表 现 在 以 下 几 个 1. 传 统 程 序 设 计 开 发 的 软 件 生 产 效 率 低 下 从 1946 年 世 界 上 第 一 台 电 子 计 算 机 问 世 以 来, 计 算 机 硬 件 的 发 展 已 经 历 了 电 子 管 晶 体 管

C++ 程 序 设 计 费 用 高 硬 件 生 产 之 所 以 效 率 高, 主 要 原 因 是 其 生 产 方 式 已 由 分 立 元 件 一 级 的 设 计 发 展 到 芯 片 ( 模 集 成 电 路 ) 一 级 的 设 计, 硬 件 重 用 性 很 好, 便 于 实 现 生 产 过 程 的 工 程 化 和 自 动 化, 生 产 效 率 高 了 然 而, 传 统 的 程 序 设 计 语 言 尽 管 经 历 了 从 低 级 语 言 到 高 级 语 言 的 发 展, 但 其 程 序 设 计 的 主 要 工 围 绕 设 计 解 题 过 程 来 进 行 的, 故 称 为 面 向 过 程 的 程 序 设 计, 传 统 的 程 序 设 计 语 言 也 称 为 过 程 性 这 种 软 件 生 产 方 式 仍 是 采 用 原 始 方 式 进 行 的, 程 序 设 计 还 是 从 语 句 一 级 开 始, 软 件 生 产 缺 乏 可 构 件, 软 件 的 重 用 问 题 没 有 得 到 很 好 的 解 决, 导 致 软 件 生 产 的 工 程 化 和 自 动 化 屡 屡 受 阻 复 杂 性 也 是 影 响 软 件 生 产 效 率 的 重 要 因 素 随 着 计 算 机 应 用 范 围 越 来 越 广, 软 件 的 规 模 越 来 越 大 决 的 问 题 也 越 来 越 复 杂 传 统 程 序 设 计 的 是 数 据 与 数 据 的 操 作 分 离, 而 且 对 同 一 数 据 的 操 作 往 在 程 序 的 不 同 地 方 这 样, 如 果 一 个 或 多 个 数 据 的 结 构 发 生 变 化, 这 种 变 化 将 波 及 程 序 的 许 多 甚 至 遍 及 整 个 程 序, 致 使 许 多 函 数 和 过 程 需 要 重 写, 严 重 时 会 导 致 整 个 程 序 的 崩 溃 因 此, 程 杂 性 对 传 统 程 序 设 计 是 一 个 很 棘 手 的 问 题, 也 是 传 统 程 序 设 计 难 于 有 根 本 性 突 破 的 重 要 原 因 软 件 维 护 是 软 件 生 命 周 期 中 最 后 一 个 环 节 传 统 程 序 设 计 中 数 据 与 数 据 的 操 作 分 离 的 结 构, 使 数 据 和 处 理 数 据 的 操 作 过 程 要 花 费 大 量 的 时 间 和 精 力, 严 重 地 影 响 了 软 件 的 生 产 效 率 总 之, 要 提 高 软 件 的 生 产 效 率, 就 必 须 很 好 地 解 决 软 件 的 重 用 性 复 杂 性 和 可 维 护 性 问 题, 但 统 程 序 设 计 无 法 解 决 的 2. 传 统 程 序 设 计 难 以 应 付 庞 大 的 信 息 量 和 多 样 的 信 息 类 型 当 前, 计 算 机 要 处 理 的 数 据 已 从 简 单 的 数 字 和 字 符, 发 展 为 具 有 多 种 格 式 的 多 媒 体 数 据, 如 文 本 视 频 图 形 图 像 和 动 画 等, 描 述 的 问 题 从 单 纯 的 计 算 问 题 发 展 到 复 杂 的 自 然 现 象 和 社 会 现 于 是, 计 算 机 要 处 理 的 信 息 量 和 信 息 类 型 迅 速 增 加, 这 就 要 求 程 序 语 言 有 更 强 大 的 信 息 处 理 而 这 是 传 统 程 序 设 计 无 法 办 到 的 3. 传 统 程 序 设 计 难 以 适 应 各 种 新 环 境 当 前, 在 计 算 机 应 用 技 术 中, 并 行 处 理 分 布 式 处 理 网 络 和 多 机 系 统 应 用 等 已 经 成 为 程 序 设 流, 这 就 要 求 系 统 包 括 一 些 具 有 独 立 数 据 处 理 能 力 的 节 点, 节 点 之 间 有 通 信 机 制, 即 能 以 消 息 行 联 络, 而 这 也 是 传 统 程 序 设 计 无 能 为 力 的 显 然, 传 统 程 序 设 计 已 不 能 满 足 计 算 机 技 术 迅 猛 发 展 的 需 要, 大 规 模 软 件 开 发 迫 切 需 要 一 种 全 序 设 计 方 法 来 满 足 需 要 1.1.3 面 向 对 象 程 序 设 计 及 其 优 点 在 程 序 设 计 中 各 种 概 念 和 方 法 日 益 成 熟 的 基 础 上, 就 如 何 超 越 程 序 的 复 杂 性 障 碍, 如 何 在 计 算 中 自 然 地 表 示 客 观 世 界 等 问 题, 人 们 提 出 了 面 向 对 象 的 程 序 设 计 方 法 它 不 是 以 过 程 为 中 心, 对 象 为 中 心 环 节, 提 出 了 对 象 + 消 息 = 程 序 设 计 的 理 论, 使 人 们 对 复 杂 系 统 的 认 识 过 程 与 系 序 设 计 实 现 过 程 尽 可 能 地 一 致 面 向 对 象 程 序 设 计 是 程 序 设 计 发 展 史 上 的 一 个 重 要 里 程 碑, 它 从 根 本 上 改 变 了 人 们 以 往 设 计 程 维 方 式, 从 而 使 程 序 设 计 摆 脱 了 具 体 的 数 据 格 式 和 过 程 的 束 缚, 将 精 力 集 中 在 要 处 理 对 象 的 设 究 上, 极 大 地 减 少 了 软 件 开 发 的 复 杂 性, 提 高 了 软 件 开 发 的 效 率 面 向 对 象 程 序 设 计 摒 弃 了 传

第 1 章 C++ 概 述 5 括 抽 象 和 继 承 等 ), 是 一 种 全 新 的 进 行 程 序 设 计 的 思 想 体 系 它 将 数 据 及 对 数 据 的 操 作 集 中 在 作 为 一 个 相 互 依 存, 不 可 分 割 的 整 体 来 处 理, 采 用 数 据 抽 象 和 信 息 隐 藏 技 术 加 入 了 类 及 其 继 对 象 以 类 为 模 板 被 创 建, 系 统 由 对 象 组 成, 对 象 经 历 一 系 列 的 状 态 变 化 以 完 成 任 务 在 面 向 对 设 计 中, 首 要 的 任 务 是 设 计 类, 每 个 类 应 设 置 足 够 的 操 作, 并 利 用 继 承 机 制 显 示 共 享 相 同 的 代 码 可 重 用 性 好 面 向 对 象 程 序 设 计 主 要 有 以 下 优 点 1. 可 提 高 程 序 代 码 的 重 用 性 面 向 对 象 程 序 设 计 中 对 象 所 具 有 的 封 装 性 和 信 息 隐 藏 等 特 性, 使 得 对 象 内 部 实 现 与 外 界 隔 离, 强 的 独 立 性, 可 以 作 为 一 个 可 重 用 的 程 序 构 件, 供 同 类 程 序 直 接 使 用 面 向 对 象 程 序 设 计 中 的 继 承 机 制 不 仅 使 子 类 可 以 重 用 其 父 类 的 数 据 和 程 序 代 码, 而 且 可 以 在 父 础 上 直 接 修 改 和 扩 充 这 种 修 改 并 不 影 响 对 原 有 类 的 使 用, 就 像 使 用 集 成 电 路 (IC) 构 建 硬 件 一 样, 可 以 方 便 地 利 用 类 来 构 建 软 件 系 统 因 此, 有 人 把 类 称 为 软 件 IC 2. 可 控 制 程 序 的 复 杂 性 面 向 对 象 程 序 设 计 采 用 了 数 据 抽 象 和 信 息 隐 藏 技 术, 把 数 据 和 对 数 据 的 操 作 封 装 在 类 中, 作 为 存 不 可 分 割 的 整 体 来 处 理 这 样, 在 程 序 中 任 何 要 访 问 这 些 数 据 的 地 方, 只 要 简 单 地 通 过 消 和 调 用 方 法 就 可 以 实 现 数 据 访 问, 有 效 地 控 制 了 程 序 的 复 杂 性 3. 可 改 善 程 序 的 可 维 护 性 在 面 向 对 象 程 序 设 计 中, 对 象 的 操 作 只 能 通 过 消 息 传 递 来 实 现 所 以, 只 要 消 息 模 式 即 对 应 的 口 不 变, 方 法 体 的 任 何 修 改 都 不 会 导 致 发 送 消 息 的 程 序 修 改, 这 显 然 给 程 序 的 维 护 带 来 了 方 便, 类 的 封 装 和 信 息 隐 藏 机 制 使 得 外 界 不 可 能 对 类 中 的 数 据 和 程 序 代 码 进 行 非 法 操 作, 这 也 大 大 程 序 出 错 的 可 能 性 4. 能 更 好 地 支 持 大 型 程 序 设 计 在 开 发 一 个 大 型 系 统 时, 应 对 任 务 进 行 明 确 的 严 格 划 分, 使 每 个 程 序 员 了 解 自 己 要 做 的 工 作 以 人 的 接 口, 方 便 每 个 程 序 员 独 立 地 设 计 调 试 自 己 负 责 的 模 块, 使 各 个 模 块 能 够 顺 利 地 应 用 到 统 中 面 向 对 象 程 序 设 计 中 的 类 是 一 个 抽 象 的 数 据 类 型, 所 以 类 作 为 一 个 程 序 模 块, 比 通 常 的 子 程 序 性 强 得 多, 面 向 对 象 程 序 设 计 又 引 入 了 动 态 连 接 和 继 承 等 机 制, 可 以 更 好 地 支 持 大 型 程 序 设 计 5. 增 强 了 计 算 机 处 理 信 息 的 范 围 面 向 对 象 程 序 设 计 模 拟 人 类 考 虑 问 题 和 认 识 世 界 的 方 式, 代 表 了 计 算 机 程 序 设 计 的 全 新 思 维 这 种 方 法 把 描 述 事 物 静 态 属 性 的 数 据 结 构 和 表 示 事 物 动 态 行 为 的 操 作 放 在 一 起 构 成 一 个 整 体, 自 然 地 表 示 客 观 世 界 的 实 体 用 类 来 直 接 描 述 现 实 世 界 中 的 类 型, 可 使 计 算 机 系 统 的 描 述 和 处 理 的 对 象 从 数 据 扩 展 到 现 实 世 种 事 物, 这 将 大 大 扩 展 计 算 机 系 统 能 够 处 理 的 信 息 量 和 信 息 类 型 6. 能 很 好 地 适 应 新 环 境 面 向 对 象 程 序 设 计 中 的 对 象 消 息 传 递 等 思 想 和 机 制, 与 并 行 处 理 分 布 式 处 理 网 络 和 多 机 用 等 恰 好 吻 合, 可 以 开 发 出 适 应 这 些 新 环 境 的 软 件 系 统 面 向 对 象 程 序 设 计 也 影 响 到 计 算 机 硬 系 结 构, 现 在 已 经 有 人 开 始 研 究 直 接 支 持 对 象 概 念 的 面 向 对 象 计 算 机, 这 样 的 计 算 机 将 更 加 适

C++ 程 序 设 计 1.1.4 面 向 对 象 程 序 设 计 的 特 点 面 向 对 象 程 序 设 计 是 在 吸 取 结 构 化 程 序 设 计 的 一 切 优 点 的 基 础 上 发 展 起 来 的 一 种 全 新 的 程 序 法, 其 本 质 是 把 数 据 和 处 理 数 据 的 过 程 抽 象 成 一 个 具 有 特 定 身 份 和 属 性 的 实 体 对 象 面 程 序 设 计 最 突 出 的 特 点 就 是 封 装 性 继 承 性 和 多 态 性 1. 封 装 性 封 装 是 一 种 数 据 隐 藏 技 术 在 面 向 对 象 程 序 设 计 中 可 以 把 数 据 和 与 数 据 有 关 的 操 作 集 中 在 一 起, 将 类 的 一 部 分 属 性 和 操 作 隐 藏 起 来, 不 让 用 户 访 问 ; 另 一 部 分 作 为 类 的 外 部 接 口, 用 户 可 以 类 通 过 接 口 与 外 部 发 生 联 系, 用 户 只 能 通 过 类 的 外 部 接 口 使 用 类 提 供 的 服 务, 而 内 部 的 具 体 实 则 被 隐 藏 起 来, 对 外 是 不 可 见 的 封 装 可 以 描 述 如 下 1 一 个 清 楚 的 边 界 对 象 的 所 有 属 性 和 操 作 被 限 定 在 该 边 界 内 部 2 一 个 口 该 接 口 用 以 描 述 这 个 对 象 和 其 他 对 象 之 间 的 相 互 作 用, 就 是 给 出 在 编 写 程 序 时, 用 户 可 以 用 的 属 性 和 操 作 3 隐 藏 受 保 护 的 属 性 和 内 部 操 作 类 所 提 供 的 功 能 的 实 现 细 节, 以 及 仅 供 内 和 修 改 的 属 性, 不 能 在 定 义 这 个 对 象 的 类 的 外 部 访 问 C++ 语 言 通 过 类 来 支 持 封 装 性 类 是 对 象 的 抽 象 及 描 述, 对 象 是 类 的 实 例 化 的 产 物, 一 个 类 中 对 象 都 具 有 相 同 的 数 据 结 构 和 操 作 代 码 在 C++ 语 言 中, 类 是 数 据 及 其 相 关 操 作 的 封 装 体, 可 一 个 整 体 来 使 用 类 中 的 具 体 操 作 细 节 被 封 装 起 来, 用 户 在 使 用 一 个 已 定 义 类 的 对 象 时, 无 需 内 部 的 实 际 工 作 流 程, 只 要 知 道 如 何 通 过 其 外 部 接 口 使 用 它 即 可 封 装 的 目 的 就 是 防 止 非 法 访 问 对 属 性 和 操 作 的 访 问 权 限 进 行 合 理 控 制, 减 少 程 序 之 间 的 相 互 影 响, 降 低 出 错 的 可 能 性 2. 继 承 性 继 承 这 一 概 念 在 现 实 世 界 中 无 处 不 在, 如 子 女 会 继 承 父 母 的 大 部 分 特 点, 新 的 产 品 会 在 老 型 号 上 进 行 改 进 因 为 有 继 承, 人 类 的 文 明 史 才 会 不 断 地 延 续 和 发 展 在 面 向 对 象 程 序 设 计 中, 继 承 是 指 新 建 的 类 从 已 有 的 类 那 里 获 得 已 有 的 属 性 和 操 作 已 有 的 类 类 或 父 类, 继 承 基 类 而 产 生 的 新 建 类 称 为 基 类 的 子 类 或 派 生 类 由 父 类 产 生 子 类 的 过 程 称 为 类 C++ 语 言 支 持 单 继 承 和 多 继 承 通 过 继 承, 程 序 可 以 在 现 有 类 的 基 础 上 声 明 新 类, 即 新 类 是 从 的 基 础 上 派 生 出 来 的, 新 类 将 共 享 原 有 类 的 属 性, 并 且 还 可 以 添 加 新 的 属 性 继 承 有 效 地 实 现 代 码 的 重 用, 增 强 了 系 统 的 可 扩 充 性 3. 多 态 性 在 人 们 的 日 常 生 活 中, 常 常 把 下 象 棋 下 跳 棋 下 围 棋 和 下 军 棋 等 统 称 为 下 棋 是 用 下 棋 这 同 一 个 名 称 来 代 替 下 象 棋 下 跳 棋 下 围 棋 和 下 军 棋 等 这 些 类 似 在 面 向 对 象 程 序 设 计 中, 通 过 多 态 性 来 支 持 这 一 思 想 多 态 性 是 指 相 同 的 函 数 名 可 以 有 多 个 不 数 体, 即 一 个 函 数 名 可 以 对 应 多 个 不 同 的 实 现 部 分 在 调 用 同 一 函 数 时, 由 于 环 境 的 不 同, 可 不 同 的 行 为, 导 致 不 同 的 动 作, 这 种 功 能 称 为 多 态 它 使 得 类 中 具 有 相 似 功 能 的 不 同 函 数 可 以 一 个 函 数 名 多 态 既 表 达 了 人 类 的 思 维 方 式, 又 减 少 了 程 序 中 标 示 符 的 个 数, 方 便 了 程 序 员 编 写 程 序 多 态

第 1 章 C++ 概 述 7 伴 随 面 向 对 象 程 序 设 计 方 法 的 提 出, 出 现 了 不 少 面 向 对 象 程 序 设 计 语 言 早 在 20 世 纪 60 年 代, 就 了 最 早 的 面 向 对 象 程 序 设 计 语 言 Simula 67 语 言 它 将 Algol 60 语 言 中 的 块 结 构 概 念 向 前 推 进 了 一, 提 出 了 对 象 的 概 念 对 象 代 表 着 待 处 理 问 题 中 的 一 个 实 体, 在 处 理 问 题 过 程 中, 一 个 对 象 可 种 形 式 与 其 他 对 象 通 信 从 概 念 上 讲, 一 个 对 象 是 既 包 含 数 据 又 包 含 有 处 理 这 些 数 据 操 作 的 一 个 程 元 Simula 语 言 中 还 使 用 了 类 的 概 念, 类 是 用 来 描 述 特 性 相 同 或 相 近 的 一 组 对 象 的 结 构 和 行 为 该 也 支 持 类 的 继 承 继 承 可 将 多 个 类 组 成 为 层 次 结 构, 进 而 允 许 共 享 结 构 和 行 为 这 些 概 念 奠 定 了 面 象 程 序 设 计 语 言 的 基 础 20 世 纪 70 年 代 出 现 的 Ada 语 言 是 支 持 数 据 抽 象 类 型 的 最 重 要 的 语 言 之 一 数 据 抽 象 是 一 种 由 数 据 及 作 用 在 数 据 结 构 上 的 操 作 组 成 的 一 个 实 体, 把 数 据 结 构 隐 藏 在 操 作 接 口 的 内 部, 通 过 操 作 接 口 实 部 的 交 流 对 外 部 来 讲, 只 知 道 做 什 么, 而 不 知 道 如 何 做 Ada 语 言 中 面 向 对 象 的 抽 象 结 构 是 包, 持 数 据 抽 象 类 型 函 数 运 算 符 重 载 和 多 态 性 等 面 向 对 象 的 机 制 但 是,Ada 语 言 不 是 全 面 地 支 持, 因 此 人 们 常 称 它 为 基 于 对 象 的 程 序 设 计 语 言 20 世 纪 80 年 代 出 现 的 Smalltalk 语 言 是 最 有 影 响 的 面 向 对 象 程 序 设 计 语 言 之 一, 它 丰 富 了 面 向 对 概 念 该 语 言 并 入 了 Simula 语 言 的 许 多 面 向 对 象 的 特 征, 包 括 类 和 继 承 等, 而 且 信 息 隐 藏 更 加 严 Smalltalk 语 言 是 一 种 弱 类 型 化 的 语 言, 一 个 程 序 中 的 同 一 个 对 象 可 以 在 不 同 时 间 内 表 现 为 不 同 的 自 1986 年 以 来, 面 向 对 象 程 序 设 计 逐 渐 走 出 实 验 室 和 研 究 部 门, 开 始 进 入 实 际 应 用 面 向 对 象 设 计 语 言 大 量 涌 现, 广 泛 地 应 用 于 程 序 设 计, 出 现 了 Object-C,Java 和 C++ 等 有 广 泛 影 响 的 面 向 程 序 设 计 语 言 这 些 语 言 大 致 可 分 为 两 类 (1) 开 发 全 新 的 面 向 对 象 程 序 设 计 语 言, 其 中 最 具 有 代 表 性 的 语 言 是 Java,Smalltalk 和 Eiffel Jav 适 合 网 络 应 用 编 程 ;Smalltalk 语 言 完 整 体 现 了 面 向 对 象 程 序 设 计 的 概 念 ;Eiffel 语 言 除 了 具 有 封 装 和 外, 还 集 成 了 其 他 面 向 对 象 的 特 征, 是 一 种 很 好 的 面 向 对 象 程 序 设 计 语 言 (2) 对 传 统 语 言 进 行 面 向 对 象 程 序 设 计 的 扩 展 这 类 语 言 又 称 混 合 型 语 言, 一 般 是 在 其 他 语 基 础 上 加 入 面 向 对 象 程 序 设 计 的 概 念 开 发 出 来 的, 最 典 型 的 代 表 是 C++ C++ 是 一 种 高 效 实 用 的 型 面 向 对 象 程 序 设 计 语 言, 它 是 在 传 统 C 语 言 的 基 础 上 增 加 了 对 面 向 对 象 程 序 设 计 的 支 持, 包 括 分 : 一 部 分 是 C++ 基 础 部 分, 以 C 语 言 为 核 心 ; 另 一 部 分 是 C++ 面 向 对 象 部 分, 是 C++ 对 C 语 言 充 这 使 得 C++ 既 支 持 传 统 的 面 向 过 程 的 结 构 化 程 序 设 计, 又 支 持 新 型 的 面 向 对 象 程 序 设 计, 同 有 C 语 言 丰 富 的 应 用 基 础 和 开 发 环 境 的 支 持 ; 对 于 已 经 较 好 地 掌 握 了 C 语 言 的 用 户 而 言, 学 习 相 对 容 易 一 些, 这 些 都 是 C++ 成 为 当 前 最 为 流 行 的 面 向 对 象 程 序 设 计 语 言 的 主 要 原 因

C++ 程 序 设 计 1.2 C++ 的 发 展 和 特 点 1.2.1 C++ 的 发 展 各 种 程 序 设 计 语 言 对 程 序 设 计 方 法 的 支 持 是 不 同 的,C++ 完 全 支 持 面 向 对 象 程 序 设 计 C++ 的 要 归 功 于 C 语 言,C 语 言 在 C++ 中 作 为 子 集 保 留 了 下 来 C 语 言 是 由 Dennis Ritchie 设 计, 并 在 DEC PDP-11 上 的 Unix 操 作 系 统 环 境 下 实 现 的, 它 是 在 19 Ken Thompson 设 计 的 B 语 言 基 础 上 发 展 来 的 1980 年, 美 国 AT&T 公 司 贝 尔 实 验 室 的 Bjarne Stioustrup 博 士 为 了 仿 真 课 题 研 究, 编 写 了 称 为 C 的 语 言 版 本 1983 年 7 月 用 C++ 将 该 语 言 名 字 定 下 来, 并 向 研 究 小 组 之 外 发 表 C++ 的 名 了 从 C 语 言 而 来 的 演 化 特 性, ++ 是 C 的 增 量 运 算 符, 之 所 以 没 有 叫 D 语 言, 是 因 为 C++ 是 的 扩 充, 它 继 承 了 C 语 言 的 优 点, 又 极 大 地 扩 充 了 C 语 言 的 功 能, 是 在 C 语 言 的 基 础 上 增 加 了 象 程 序 设 计 的 特 征 C++ 已 经 在 众 多 应 用 领 域 中 迅 速 成 为 程 序 员 首 选 的 程 序 设 计 语 言, 尤 其 适 用 于 开 发 大 中 型 项 目 件 开 发 时 间 费 用 到 软 件 的 可 重 用 性 可 扩 充 性 可 维 护 性 以 及 可 靠 性 等 方 面,C++ 都 显 示 出 性 与 之 相 适 应,C++ 语 言 的 开 发 环 境 也 随 之 不 断 推 出 目 前, 常 用 的 C++ 开 发 环 境 主 要 有 Borla +,Visual C++( 简 称 VC) 等 1986 年 Borland 公 司 开 发 了 Turbo C++ 程 序 语 言, 而 后 又 推 出 了 Borland C++ 版 本 Microsoft 公 20 世 纪 80 年 代 中 期 在 Microsoft C 6.0 的 基 础 上 开 发 了 Microsoft C/C++ 7.0, 同 时 引 进 了 Microso ndation Class(MFC)1.0 版 本, 完 善 了 源 代 码 这 些 版 本 都 是 依 赖 于 DOS 环 境 的, 直 到 Microso 推 出 的 Microsoft C/C++ 8.0, 即 Visual C++ 1.0 版 本 出 现, 它 是 第 一 个 真 正 基 于 Windows 环 境 视 化 的 集 成 开 发 环 境, 将 编 辑 编 译 连 接 和 运 行 集 成 为 一 体 从 Visual C++ 1.5 版 本 以 后,Microso 决 定 不 再 将 更 多 的 努 力 花 在 支 持 16 位 编 程 上 虽 然 Visual C++ 2.0 仍 提 供 对 16 位 的 支 持, 但 版 本 以 后,Visual C++ 将 更 多 地 用 来 创 建 32 位 程 序 在 版 本 上,Microsoft 公 司 没 有 推 出 3.0 版 本 号 直 接 从 2.0 跳 到 了 4.0, 将 Visual C++ 与 MFC 的 版 本 号 取 得 一 致 由 于 Internet 的 迅 猛 发 展, 针 对 网 络 环 境 下 的 面 向 对 象 程 序 设 计 明 显 占 据 主 导 地 位, 所 以 Microso 在 Visual C++ 4.0 版 本 中, 引 进 了 为 Internet 编 程 而 设 计 的 新 类 库 Visual C++ 5.0 版 本 也 增 加 新 类, 但 注 意 力 更 多 地 集 中 在 改 善 界 面 设 计 上, 以 提 供 一 个 更 好 的 在 线 帮 助 系 统 更 高 级 的 宏 对 在 开 发 者 组 内 进 行 类 和 其 他 代 码 共 享 的 支 持 伴 随 Windows 98 操 作 系 统 的 发 布,Microsoft 公 司 又 隆 重 推 出 了 Visual C++ 6.0 它 在 Visual C++ 5 础 上 做 了 很 大 改 进, 提 供 了 许 多 新 的 特 点, 功 能 更 加 强 大 它 具 有 以 下 特 点 (1) 编 译 器 较 以 前 有 了 很 大 的 改 进, 可 以 支 持 ANSI C++ 标 准, 并 支 持 布 尔 类 型, 对 于 模 板 的 得 到 了 改 善 (2)Visual C++ 6.0 开 发 环 境 Developer Studio 是 由 Windows 95/98 或 Windows NT 环 境 下 运 行 集 成 工 具 所 组 成 Developer Studio 编 辑 器 有 了 很 大 的 改 善, 它 具 有 允 许 编 辑 器 自 动 地 完 成 通 用 辑 的 特 点 使 用 Developer Studio 不 仅 可 以 创 建 被 Visual C++ 6.0 使 用 的 源 文 件 和 其 他 文 档, 而

第 1 章 C++ 概 述 9 作 区 窗 口 来 查 看 和 访 问 项 目 中 的 各 种 元 素 (3)Visual C++ 6.0 包 括 一 些 增 加 的 MFC(Microsoft Fundation Class) 库 的 新 功 能 增 加 的 内 容 包 Internet 编 程 的 库 和 支 持 在 Internet Explorer 和 Windows 98 中 介 绍 的 新 的 通 用 控 件 (4)Visual C++ 6.0 提 供 了 最 快 的 集 成 数 据 库 访 问 方 式, 允 许 用 户 建 立 强 有 力 的 数 据 库 应 用 程 序 使 用 ODBC 类 和 高 性 能 的 32 位 ODBC 驱 动 程 序 来 访 问 各 种 数 据 库 管 理 系 统, 也 可 以 使 用 DA 据 访 问 对 象 ) 类 通 过 编 程 语 言 来 访 问 和 操 纵 数 据 库 中 的 数 据 并 管 理 数 据 库 数 据 库 对 象 与 结 构 (5)Visual C++ 6.0 对 Internet 提 供 了 强 有 力 的 支 持 (6) 一 个 增 强 型 的 联 机 帮 助 系 统 使 Visual C++ 6.0 变 得 容 易 学 习, 只 需 单 击 鼠 标 即 可 实 现 若 机 上 安 装 了 MSDN, 联 机 帮 助 系 统 将 自 动 使 用 最 新 的 MSDN 版 本 总 之,Visual C++ 经 历 了 从 1.0 到 6.0 版 本 的 发 展, 软 件 系 统 逐 渐 庞 大, 功 能 也 日 臻 完 善 考 虑 ual C++ 6.0 的 流 行 性, 本 书 将 以 Visual C++ 6.0 作 为 编 写 C++ 程 序 的 集 成 开 发 环 境, 所 有 程 序 均 中 文 VC++ 6.0 集 成 开 发 环 境 下 运 行 通 过 1.2.2 C++ 的 特 点 (1)C++ 全 面 兼 容 C 语 言, 许 多 C 语 言 代 码 不 经 修 改 就 可 以 在 C++ 中 使 用 (2) 用 C++ 编 写 的 程 序 可 读 性 更 好, 代 码 结 构 更 为 合 理 (3) 生 成 代 码 质 量 高, 运 行 效 率 仅 比 汇 编 语 言 慢 10%~20% (4) 从 开 发 时 间 费 用 到 形 成 软 件 的 可 重 用 性 可 扩 充 性 可 维 护 性 和 可 靠 性 等 方 面 都 有 很 大 使 得 大 中 型 软 件 开 发 变 得 容 易 (5) 支 持 面 向 对 象 程 序 设 计, 可 方 便 地 构 造 出 模 拟 现 实 问 题 的 实 体 和 操 作 1.2.3 C++ 与 C 语 言 的 关 系 C++ 是 C 语 言 的 一 个 超 集,C++ 包 含 了 C 语 言 的 全 部 内 容, 它 与 C 语 言 的 关 系 如 下 1.C++ 保 持 了 与 C 语 言 的 兼 容 这 种 兼 容 性 表 现 在 绝 大 多 数 C 语 言 程 序 代 码 无 需 任 何 修 改 就 可 以 直 接 在 C++ 程 序 中 应 用, 用 C 写 的 许 多 库 函 数 和 应 用 软 件 也 都 可 以 直 接 用 于 C++, 这 使 得 C 程 序 员 能 够 更 容 易 地 学 习 C++, 握 C++ 语 言 的 新 特 征 就 可 以 了 但 是, 这 种 兼 容 性 也 使 得 C++ 语 言 不 是 一 个 纯 粹 的 面 向 对 象 程 序 设 计 语 言 因 为 C 语 言 是 面 向 过 序 设 计 语 言,C++ 要 与 C 语 言 兼 容, 所 以 C++ 也 要 支 持 面 向 过 程 的 程 序 设 计 这 使 得 C++ 可 以 将 同 风 格 的 程 序 设 计 技 术 融 为 一 体, 但 也 有 可 能 使 初 学 者 感 到 无 所 适 从 因 此, 在 学 习 C++ 程 序 设 计 时 用 面 向 过 程 的 思 想 去 学 习 面 向 对 象 的 程 序 设 计, 要 转 变 以 前 传 统 的 观 念, 注 意 采 用 面 向 对 象 的 思 维 从 全 新 的 面 向 对 象 的 角 度 来 学 习 C++ 程 序 设 计 2.C++ 对 C 语 言 作 了 很 多 改 进 C++ 既 保 持 了 C 语 言 的 简 洁 高 效 的 特 点, 同 时 又 对 C 语 言 作 了 改 进 和 补 充, 主 要 有 以 下 几 点 (1) 增 加 了 一 些 新 的 运 算 符, 使 得 C++ 应 用 起 来 更 加 方 便 例 如 :::,new,delete 和 > 等 (2) 改 进 了 类 型 系 统, 增 加 了 安 全 性 C 语 言 中 类 型 转 换 很 不 严 格,C++ 规 定 类 型 转 换 多 采 取 换 ; 又 规 定 函 数 的 说 明 必 须 采 用 原 型 ; 对 缺 省 类 型 作 了 些 限 制 ; 还 增 加 了 编 译 系 统 检 查 类 型 的

C++ 程 序 设 计 (4) 允 许 函 数 和 运 算 符 重 载, 允 许 设 置 缺 省 参 数, 这 些 措 施 提 供 了 程 序 的 灵 活 性, 减 少 了 冗 余 性 进 了 内 联 函 数 的 概 念, 提 高 了 程 序 的 效 率 (5) 对 变 量 说 明 更 加 灵 活 C 语 言 只 允 许 在 函 数 体 内 部 进 行 说 明, 而 且 必 须 先 声 明 后 使 用, 否 出 错 C++ 打 破 了 这 一 限 制, 可 以 根 据 需 要 随 时 对 变 量 进 行 说 明 3.C++ 与 C 语 言 的 本 质 区 别 C 语 言 仅 仅 支 持 面 向 过 程 的 程 序 设 计, 而 C++ 是 在 C 语 言 的 基 础 上 增 加 了 面 向 对 象 程 序 设 计 的, 所 以 C++ 支 持 面 向 对 象 程 序 设 计 可 以 说 C++ 不 仅 仅 是 对 C 语 言 进 行 了 一 些 改 进, 更 重 要 的 了 一 次 变 革, 使 得 C++ 成 为 学 习 面 向 对 象 程 序 设 计 的 首 选 1.3 C++ 程 序 基 本 结 构 学 习 C++ 程 序 设 计, 最 好 先 从 最 简 单 的 C++ 程 序 开 始, 先 接 触 C++ 的 最 基 本 结 构, 以 后 再 逐 步 了 解 C++ 程 序 的 完 整 结 构 1.3.1 C++ 程 序 基 本 结 构 现 在 通 过 编 制 一 个 小 程 序 来 说 明 C++ 程 序 的 基 本 结 构, 该 程 序 在 屏 幕 上 显 示 输 出 一 行 字 符 串 Th y first C++ program! 例 1.1 一 个 简 单 的 C++ 程 序 # include "iostream.h" void main() // 在 显 示 器 上 输 出 显 示 一 行 字 符 串 cout<<"this is my first C++ program! "<<endl; 下 面 来 分 析 例 1.1 的 程 序 结 构 程 序 第 一 行 #include <iostream.h> 是 一 条 预 处 理 指 令, 指 示 编 译 器 将 头 文 件 iostream.h 中 的 代 码 程 序 中 该 指 令 所 在 之 处 C++ 程 序 开 始 部 分 出 现 以 # 开 头 的 命 令, 表 示 这 些 命 令 是 预 处 理 命 令 C+ 了 3 类 预 处 理 命 令 : 宏 定 义 命 令 文 件 包 含 命 令 和 条 件 编 译 命 令 例 1.1 中 出 现 的 # inclu stream.h> 是 文 件 包 含 命 令, 其 中 include 是 关 键 字, 尖 括 号 内 是 被 包 含 的 文 件 名,iostream.h 是 一 件, 它 以.h 为 扩 展 名, 该 文 件 包 含 程 序 输 入 / 输 出 操 作 所 必 须 的 标 准 输 入 / 输 出 流 对 象 第 二 行 定 义 了 一 个 主 函 数 main(), 其 中 main 是 函 数 名,void 表 示 该 函 数 没 有 返 回 值 它 是 程 执 行 的 地 方, 即 程 序 生 成 可 执 行 文 件 后, 将 在 此 处 开 始 运 行 程 序 C++ 的 程 序 是 由 若 干 个 文 件, 每 个 文 件 又 由 若 干 个 函 数 组 成 因 此, 可 以 认 为 C++ 的 程 序 就 是 由 一 个 个 的 函 数 组 成 的 函 是 相 互 独 立 的, 相 互 之 间 可 以 调 用 在 组 成 一 个 C++ 程 序 的 若 干 个 函 数 中, 必 须 有 一 个 且 只 能 主 函 数 main() 执 行 程 序 时, 系 统 先 从 主 函 数 开 始 运 行, 其 他 函 数 只 能 被 主 函 数 调 用 或 通 过 主 用 的 函 数 所 调 用, 函 数 可 以 嵌 套 调 用, 即 在 一 个 函 数 中 调 用 另 外 一 个 函 数 主 函 数 可 以 带 参 数 以 不 带 参 数 函 数 在 调 用 之 前, 必 须 先 定 义 好 定 义 函 数 要 按 照 系 统 规 定 的 格 式 进 行, 以 后 再

第 1 章 C++ 概 述 11 函 数 的 结 束 函 数 体 部 分 由 许 多 C++ 语 句 组 成, 这 些 语 句 描 述 了 函 数 的 功 能 实 现 第 四 行 是 程 序 的 注 释 部 分, 用 来 说 明 下 面 的 语 句 是 要 在 显 示 器 上 输 出 显 示 一 行 字 符 串 注 释 信 较 大 或 较 复 杂 的 C++ 程 序 是 非 常 必 要 的, 可 以 解 释 一 行 语 句 或 几 行 语 句 的 作 用 或 功 能, 提 高 程 读 性 在 C++ 中, 注 释 信 息 有 两 种 类 型 : 一 种 是 如 例 1.1 所 示 用 // 作 注 释, 则 本 行 中 // 字 符 都 会 被 作 为 注 释 信 息 处 理 ; 另 一 种 注 释 信 息 是 用 /* 和 */ 作 注 释, 则 /* 和 */ 所 有 字 符 都 会 被 作 为 注 释 信 息 处 理, 此 时 的 注 释 信 息 可 以 是 一 行, 也 可 以 是 多 行, 适 合 于 大 块 第 五 行 是 主 函 数 的 函 数 体 部 分, 也 是 例 1.1 的 主 要 部 分 该 部 分 只 有 一 条 语 句, 其 中 cout 是 标 流 对 象, 实 际 指 定 显 示 器 为 输 出 设 备 ; << 是 cout 中 的 运 算 符, 表 示 把 它 后 面 的 数 据 在 输 出 输 出 显 示 ; This is my first C++ program! 是 要 输 出 显 示 的 具 体 内 容, 双 引 号 表 示 要 显 示 是 一 个 字 符 串 ; 最 后 的 endl 表 示 回 车 换 行 ; 分 号 ; 表 示 语 句 结 束,C++ 规 定 语 句 必 须 要 用 ; 结 尾 由 以 上 分 析 可 以 看 出, 一 个 C++ 程 序 的 基 本 结 构 包 括 以 # 开 头 的 若 干 个 预 处 理 命 令, 将 程 要 的 头 文 件 包 含 进 来 ; 然 后 是 定 义 主 函 数 和 其 他 函 数, 当 然 函 数 也 可 以 在 程 序 的 起 始 部 分 先 利 原 型 进 行 声 明, 在 以 后 再 进 行 定 义 ; 用 大 括 号 括 起 来 的 部 分 就 是 函 数 体 部 分, 函 数 体 部 分 主 各 种 各 样 的 语 句 和 注 释 信 息, 这 部 分 应 该 是 程 序 的 主 体 部 分, 占 的 比 重 也 最 大 1.3.2 C++ 程 序 的 书 写 格 式 C++ 程 序 的 书 写 格 式 基 本 与 C 语 言 程 序 书 写 格 式 相 同 基 本 原 则 如 下 (1) 一 般 情 况 下 一 行 只 写 一 条 语 句 短 语 句 可 以 一 行 写 多 条, 长 语 句 可 以 分 成 多 行 来 写 分 行 不 能 将 一 个 单 词 分 开 ; 用 双 引 号 括 起 来 的 字 符 串 最 好 也 不 要 分 开, 如 果 一 定 要 分 开, 有 的 编 译 求 在 行 尾 加 上 续 行 符 \ (2)C++ 程 序 书 写 时 要 尽 量 提 高 可 读 性 因 此, 采 用 适 当 地 缩 进 格 式 书 写 程 序 是 非 常 必 要 的, 类 内 容 或 同 一 层 次 的 语 句 要 对 齐 例 如, 一 个 循 环 的 循 环 体 中 的 各 语 句 要 对 齐, 同 一 个 if 语 句 if 体 内 的 若 干 条 语 句 或 else 体 内 的 若 干 语 句 要 对 齐 (3)C++ 程 序 中 大 括 号 使 用 较 多, 其 书 写 方 法 也 较 多, 建 议 用 户 要 养 成 使 用 大 括 号 的 固 定 例 如, 每 个 大 括 号 占 一 行, 并 与 使 用 大 括 号 的 语 句 对 齐, 大 括 号 内 的 语 句 采 用 缩 进 两 个 字 符 的 写, 如 例 1.1 所 示 1.4 C++ 程 序 的 上 机 实 现 C++ 源 程 序 要 经 过 编 辑 编 译 连 接 和 运 行 4 个 环 节, 才 能 在 屏 幕 上 显 示 结 果 例 如, 要 编 制 为 Hello 的 程 序, 其 操 作 流 程 如 图 1-1 所 示 源 程 序 目 标 程 序 可 执 行 程 序 编 辑 编 译 连 接 运 行 Hello.cpp Hello.obj Hello.exe

C++ 程 序 设 计 1.4.1 编 辑 编 辑 是 将 写 好 的 C++ 源 程 序 输 入 到 计 算 机 中 生 成 磁 盘 文 件 的 过 程 C++ 程 序 的 编 辑 可 以 使 用 计 提 供 的 各 种 编 辑 器 进 行 编 辑, 编 辑 好 的 源 程 序 可 以 保 存 到 磁 盘 文 件 中, 默 认 文 件 扩 展 名 为 *.cpp Visual C++ 6.0 为 编 辑 C++ 源 程 序 提 供 了 一 个 功 能 良 好 的 编 辑 器, 其 主 要 编 辑 功 能 有 定 义 块 移 复 制 块 删 除 块 插 入 字 符 以 及 保 存 文 件 等 1.4.2 编 译 编 辑 好 的 源 程 序 必 须 经 过 编 译, 翻 译 成 计 算 机 能 够 识 别 的 机 器 代 码, 计 算 机 才 能 执 行 编 译 器 C++ 源 程 序 转 换 成 二 进 制 代 码 的 形 式, 这 些 二 进 制 代 码 称 为 目 标 代 码 将 这 些 目 标 代 码 以 *.obj 为 保 存 在 磁 盘 中, 称 为 目 标 程 序 编 译 阶 段 要 进 行 词 法 分 析 和 语 法 分 析, 又 称 源 程 序 分 析 这 一 阶 段 主 要 是 分 析 程 序 的 语 法 结 构 C++ 源 程 序 的 语 法 错 误 如 果 分 析 过 程 中 发 现 有 不 符 合 要 求 的 语 法 错 误, 就 会 及 时 报 告 给 用 户, 类 型 显 示 在 屏 幕 上 例 如, 在 程 序 中 将 标 准 输 出 流 对 象 cout 误 写 成 couth, 则 进 行 编 译 时, 在 信 窗 口 会 显 示 error C2065: couth :undeclared identifier, 表 明 couth 是 一 个 没 有 声 明 的 标 识 符 该 错 误 信 息, 光 标 会 指 到 出 错 的 代 码 行, 便 于 用 户 进 行 修 改 编 译 可 以 生 成 符 号 表 或 称 数 据 字 典, 它 用 来 映 射 程 序 中 的 各 种 符 号 及 它 们 的 属 性, 如 某 个 变 量 所 占 内 存 空 间 和 分 配 在 存 储 器 中 的 相 对 位 置 等 1.4.3 连 接 编 译 后 生 成 的 目 标 代 码 还 不 能 直 接 在 计 算 机 上 运 行, 其 主 要 原 因 是 编 译 器 对 每 个 源 程 序 文 件 分 别 进 行 如 果 一 个 程 序 有 多 个 源 程 序 文 件, 编 译 后 这 些 源 程 序 文 件 还 分 布 在 不 同 的 地 方 因 此, 需 要 把 它 们 连 起, 生 成 可 以 在 计 算 机 上 运 行 的 可 执 行 文 件 即 使 C++ 源 程 序 只 有 一 个 源 文 件, 这 个 源 文 件 生 成 的 目 还 需 要 系 统 提 供 的 库 文 件 中 的 一 些 代 码, 故 也 需 要 连 接 起 来 连 接 工 作 一 般 由 编 译 系 统 中 的 连 接 程 序 ( 又 称 连 接 器 ) 来 完 成, 连 接 器 将 由 编 译 器 生 成 的 目 标 件 和 库 中 的 某 些 文 件 连 接 在 一 起, 生 成 一 个 可 执 行 文 件 可 执 行 文 件 的 默 认 扩 展 名 为 *.exe 1.4.4 运 行 一 个 C++ 源 程 序 经 过 编 译 和 连 接 后 生 成 了 可 执 行 文 件, 该 文 件 可 以 在 Windows 环 境 下 直 接 双 击 也 可 以 在 Visual C++ 6.0 的 集 成 开 发 环 境 下 运 行 程 序 运 行 后, 将 在 屏 幕 上 显 示 运 行 结 果 或 显 示 提 示 用 户 输 入 数 据 的 信 息 用 户 可 以 根 据 运 行 结 断 程 序 是 否 有 算 法 错 误 在 生 成 可 执 行 文 件 之 前, 一 定 要 改 正 编 译 和 连 接 时 出 现 的 致 命 错 误 和 误, 这 样 才 能 保 证 运 行 结 果 是 正 确 的 因 为 程 序 中 的 警 告 错 误 虽 然 不 影 响 生 成 可 执 行 文 件, 但 导 致 结 果 错 误 下 面 以 一 个 简 单 C++ 程 序 设 计 为 例 来 说 明 C++ 程 序 的 上 机 实 现 过 程 (1) 启 动 Visual C++ 6.0 用 户 可 以 单 击 开 始 菜 单, 在 程 序 选 项 中 选 择 Microsoft Visu dio 6.0 级 联 菜 单 下 的 Microsoft Visual C++6.0, 或 在 桌 面 上 双 击 Microsoft Visual C++6.0

第 1 章 C++ 概 述 13 图 1-2 Visual C++ 的 集 成 开 发 环 境 (2) 在 文 件 菜 单 下, 选 择 新 建 命 令, 将 弹 出 新 建 对 话 框, 如 图 1-3 所 示 图 1-3 新 建 对 话 框 在 该 对 话 框 中 选 择 工 程 标 签 下 的 Win32 Console Application 选 项, 可 创 建 一 个 基 于 控 制 程 序 的 工 程 在 工 程 编 辑 栏 内 输 入 创 建 的 工 程 名 称 (sum), 在 位 置 编 辑 栏 内 输 入 工 程 位 置 (f:\sum), 其 他 选 项 选 择 默 认 值, 单 击 确 定 按 钮 将 弹 出 Win32 Console Application 骤 对 话 框, 如 图 1-4 所 示

C++ 程 序 设 计 图 1-4 Win32 Console Application 项 目 步 骤 对 话 框 (3) 在 Win32 Console Application 项 目 步 骤 对 话 框 中, 用 户 可 以 选 择 想 要 创 建 应 用 程 序 的 类 型 4 个 选 项 : 一 个 空 白 工 程 一 个 简 单 应 用 程 一 个 世 界, 你 好 应 用 程 序 和 一 个 支 持 C 的 应 用 程 序 不 同 的 选 项 意 味 着 系 统 自 动 生 成 码 会 有 所 不 同 此 例 中 选 择 第 2 个 选 项, 创 建 一 个 简 单 的 应 用 然 后 单 击 完 成 按 钮, 将 出 现 新 建 工 程 对 话 框 如 图 1-5 所 示 该 对 话 框 给 出 了 新 创 程 的 简 单 信 息 (4) 单 击 确 定 按 钮, 将 回 到 Visual C++ 6.0 成 开 发 环 境 至 此, 一 个 新 的 应 用 程 序 创 建 完 成, 系 统 为 用 户 创 建 了 主 文 件 sum.cpp 和 预 编 译 头 文 件 Stdafx.h, 1-6 所 示 在 右 边 的 程 序 编 辑 窗 口 中 输 入 以 下 代 码 : #include"iostream.h" // 函 数 原 型 int add(int a,int b); 图 1-5 新 建 工 程 信 息 对 话 框

第 1 章 C++ 概 述 15 图 1-6 新 创 建 的 应 用 程 序 int main(int argc, char* argv[]) int x,y,sum; cout<<" 请 输 入 两 个 整 数 :"<<endl; cin>>x>>y; sum=add(x,y); cout<<" 两 数 之 和 为 :"<<sum<<endl; return 0; // 函 数 add 定 义 int add(int a,int b) int c; c=a+b; return c; 代 码 输 入 完 毕 后, 单 击 文 件 菜 单 中 的 保 存 命 令, 或 直 接 单 击 工 具 栏 上 的 保 存 工 具 保 存 C++ 源 程 序, 文 件 名 为 sum.cpp (5) 用 户 也 可 以 在 新 建 对 话 框 中 选 择 文 件 标 签, 出 现 如 图 1-7 所 示 的 界 面 在 该 对 话

可 进 入 代 码 编 辑 窗 口, 如 图 1-8 所 示 C++ 程 序 设 计 图 1-7 新 建 文 件 对 话 框 图 1-8 代 码 编 辑 窗 口 在 该 窗 口 中 输 入 程 序 代 码 (6) 单 击 微 型 编 译 工 具 栏 中 的 编 译 程 序 工 具 按 钮, 对 C++ 源 程 序 sum.cpp 进 行 编 译 如 有 错 误, 需 要 回 到 程 序 编 辑 窗 口 重 新 编 辑, 直 到 没 有 错 误 为 止 此 时, 将 在 信 息 输 出 窗 口 中 显 m.obj - 0 error(s), 0 warning(s) 的 信 息 (7) 编 译 完 成 后, 单 击 微 型 编 译 工 具 栏 中 的 连 接 程 序 工 具 按 钮, 如 果 没 有 连 接 错 误, 将 执 行 文 件 sum.exe

第 1 章 C++ 概 述 17 图 1-9 程 序 执 行 结 果 程 序 运 行 后, 将 弹 出 一 个 窗 体 要 求 用 户 输 入 两 个 整 数, 用 户 输 入 两 个 整 数 ( 如 4 和 5) 后 回 车, 显 示 求 和 的 结 果, 如 图 1-9 所 示 习 题 1. 试 比 较 面 向 对 象 程 序 设 计 结 构 化 程 序 设 计 和 模 块 化 程 序 设 计 2. 解 释 以 下 概 念 : 类 对 象 封 装 数 据 抽 象 继 承 多 态 3. 谈 谈 你 对 C++ 语 言 特 点 的 理 解 4. 编 写 程 序 在 屏 幕 上 显 示 字 符 串 欢 迎 大 家 学 习 C++ 语 言!, 并 按 照 书 中 介 绍 练 习 C++ 语 言 实 现 过 程

第 2 章 基 本 数 据 类 型 和 表 达 式 数 据 是 程 序 处 理 的 对 象, 是 程 序 中 必 不 可 少 的 重 要 组 成 部 分 对 不 同 类 型 的 数 据 有 不 同 的 处 理 方 法, 每 种 数 据 都 有 适 合 自 己 运 算 规 则 的 表 达 式 C++ 语 言 提 供 了 丰 富 的 数 据 类 型 运 算 符 和 表 达 式, 能 够 准 确 地 描 述 现 实 世 界 的 各 种 问 题, 方 便 有 效 地 加 工 处 理 各 种 类 型 的 数 据 2.1 词 法 符 号 就 像 一 篇 英 语 文 章 是 由 英 文 单 词 和 标 点 符 号 组 成, 而 单 词 是 由 26 个 英 文 字 母 组 成 一 样, 一 个 由 特 定 程 序 设 计 语 言 编 写 的 程 序 也 有 一 些 确 定 的 单 词 和 字 符 可 以 使 用 单 词 又 称 词 法 符 号, 它 是 由 若 干 个 字 符 组 成 的 具 有 一 定 意 义 的 最 小 词 法 单 元 C++ 语 言 中 共 有 5 种 词 法 符 号 : 标 识 符 关 键 字 常 量 运 算 符 和 分 隔 符 在 介 绍 词 法 符 号 之 前, 先 来 了 解 C++ 语 言 可 以 使 用 的 字 符 集 字 符 是 构 成 C++ 语 言 的 基 本 要 素, 所 有 可 用 的 字 符 构 成 了 字 符 集, 就 像 英 语 中 的 26 个 英 文 字 母 和 各 种 可 用 的 标 点 符 号 一 样 C++ 语 言 的 字 符 集 包 括 以 下 几 种 (1) 英 文 字 母 :A~Z,a~z (2) 数 字 字 符 :0~9 (3) 特 殊 字 符 : 空 格! # % ^ & * _( 下 划 线 ) + = ~ < > / \ ' " ;., ( ) [] 2.1.1 标 识 符 标 识 符 是 程 序 员 为 命 名 程 序 中 的 一 些 实 体 而 定 义 的 专 用 词 法 符 号, 常 见 的 有 函 数 名 类 名 变 量 名 常 量 名 和 对 象 名 等 C++ 语 言 中 标 识 符 的 命 名 规 则 如 下 (1) 标 识 符 由 英 文 字 母 ( 包 括 大 写 和 小 写 ) 数 字 和 下 划 线 组 成, 并 且 以 字 母 和 下 划 线 开 始, 其 后 跟 零 个 或 多 个 字 母 数 字 或 下 划 线 注 意 : 标 识 符 不 可 以 数 字 开 始 例 如,Abc,X1,_x1 及 desk 都 是 合 法 的 标 识 符, 而 2A 是 非 法 的 (2) 标 识 符 中 大 写 和 小 写 字 母 是 有 区 别 的 例 如,A1 和 a1 是 两 个 不 同 的 标 识 符 (3) 标 识 符 的 长 度 是 任 意 的, 但 有 的 编 译 系 统 仅 识 别 前 32 个 字 符 (4) 标 识 符 不 能 和 C++ 语 言 的 关 键 字 同 名 2.1.2 关 键 字 关 键 字 是 一 种 有 特 殊 用 途 的 词 法 符 号, 是 C++ 系 统 预 定 义 的 保 留 字, 不 能 再 用 作 其 他 用 途

第 2 章 基 本 数 据 类 型 和 表 达 式 19 下 面 列 举 一 些 C++ 语 言 中 常 用 的 关 键 字 auto break bool 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 true typedef union unsigned using virtual void while 2.1.3 常 量 常 量 在 运 算 过 程 中 值 保 持 不 变, 可 以 直 接 用 字 符 表 示 常 量 包 括 数 字 常 量 字 符 常 量 和 字 符 串 常 量 例 如, 定 义 常 量 pi 表 示 圆 周 率 3.1415926, 则 以 后 就 可 以 用 pi 替 代 3.1415926 2.1.4 运 算 符 运 算 符 是 C++ 语 言 实 现 各 种 运 算 的 符 号, 包 括 +,,* 和 / 等 运 算 符 根 据 操 作 对 象 的 个 数 不 同, 可 以 分 为 单 目 运 算 符 双 目 运 算 符 和 三 目 运 算 符 单 目 运 算 符 又 称 一 元 运 算 符, 它 只 对 一 个 操 作 数 进 行 操 作 例 如, 求 负 运 算 符 (-) 逻 辑 求 反 运 算 符 (!) 等 双 目 运 算 符 又 称 二 元 运 算 符, 它 可 以 对 两 个 操 作 数 进 行 操 作 例 如, 加 法 运 算 符 (+) 乘 法 运 算 符 (*) 等 三 目 运 算 符 又 称 三 元 运 算 符, 它 可 以 对 三 个 操 作 数 进 行 操 作 C++ 语 言 中 只 有 一 个 三 目 运 算 符, 就 是 条 件 运 算 符 (?:) 有 关 各 种 运 算 符 的 使 用 方 法 将 在 以 后 的 章 节 中 详 细 介 绍 2.1.5 分 隔 符 分 隔 符 又 称 标 点 符 号, 是 用 来 分 隔 单 词 或 程 序 正 文 的, 它 可 以 表 示 某 个 程 序 实 体 的 结 束 和 另 一 个 程 序 实 体 的 开 始 在 C++ 语 言 中, 常 用 的 分 隔 符 有 以 下 几 个 (1) 空 格 符 : 常 用 来 作 为 单 词 与 单 词 之 间 的 分 隔 符 (2) 逗 号 : 用 来 作 为 多 个 变 量 之 间 的 分 隔 符, 或 用 来 作 为 函 数 的 多 个 参 数 之 间 的 分 隔 符 (3) 分 号 : 仅 用 来 作 为 for 循 环 语 句 中 for 关 键 字 后 面 括 号 中 三 个 表 达 式 的 分 隔 符 (4) 冒 号 : 用 来 作 为 语 句 标 号 与 语 句 之 间 的 分 隔 符, 或 switch 语 句 中 关 键 字 case< 整 型 常 量 > 与 语 句 序 列 之 间 的 分 隔 符 还 有 () 和 也 可 以 作 为 分 隔 符 这 些 分 隔 符 不 表 示 任 何 实 际 的 操 作, 仅 用 于 构 造 程 序 由 于 C++ 编 译 器 将 注 释 也 当 作 空 白 对 待, 故 注 释 也 可 用 作 分 隔 符 2.2 基 本 数 据 类 型 C++ 语 言 中, 程 序 能 够 处 理 的 所 有 数 据 肯 定 都 属 于 某 种 数 据 类 型 数 据 类 型 不 同, 则 数 据 所 占 用 的 存 储 空 间, 所 能 表 示 的 数 据 范 围 和 精 度 以 及 所 能 进 行 的 运 算 均 不 相 同 C++ 语 言 的 数 据 类 型 是 十 分 丰 富 的, 大 致 可 分 为 基 本 数 据 类 型 和 非 基 本 数 据 类 型 基 本

20 C++ 程 序 设 计 数 据 类 型 包 括 整 型 字 符 型 浮 点 型 和 布 尔 型 非 基 本 数 据 类 型 主 要 包 括 数 组 类 型 结 构 体 类 型 共 用 体 类 型 指 针 类 型 和 空 类 型 等, 如 图 2-1 所 示 本 章 将 主 要 讨 论 基 本 数 据 类 型, 非 基 本 数 据 类 型 的 有 关 知 识 将 在 以 整 型 字 符 型 基 本 整 型 短 整 型 长 整 型 后 的 章 节 介 绍 除 了 如 图 2-1 所 示 的 数 据 类 型 以 外,C++ 还 提 供 了 4 个 类 型 修 饰 符 作 为 前 缀, 它 用 来 基 本 数 据 类 型 单 精 度 型 浮 点 型 双 精 度 型 布 尔 型 改 变 基 本 数 据 类 型 的 含 义, 以 便 更 准 确 地 适 应 各 种 情 况 的 需 要 这 4 个 类 型 修 饰 符 分 别 是 :long 长 型,signed 有 符 号,unsigned 无 符 号,short 短 型 其 中 long 和 short 在 修 饰 基 本 整 型 int 时 可 省 略 int,signed 在 表 示 有 符 号 数 时 可 省 略 signed 数 据 类 型 决 定 了 数 据 在 内 存 中 所 占 的 空 数 组 类 型 数 据 类 型 构 造 数 据 类 型 结 构 体 类 型 共 用 体 类 型 指 针 类 型 空 类 型 图 2-1 C++ 语 言 的 数 据 类 型 间 大 小, 也 确 定 了 表 示 范 围 各 种 基 本 数 据 类 型 的 长 度 和 取 值 范 围 如 表 2-1 所 示 表 2-1 C++ 的 基 本 数 据 类 型 数 据 类 型 说 明 长 度 ( 字 节 ) 取 值 范 围 bool 布 尔 型 true,false char(signed char) 字 符 型 1 128~127 unsigned char 无 符 号 字 符 型 1 0~255 short(signed short) 短 整 型 2 32768~32767 unsigned short 无 符 号 短 整 型 2 0~65535 int(signed int) 基 本 整 型 4 2147483648~2147483647 unsigned int 无 符 号 整 型 4 0~4294967295 long(signed long) 长 整 型 4 2147483648~2147483647 unsigned long 无 符 号 长 整 型 4 0~4294967295 float 单 精 度 型 4 3.4 10 38 ~3.4 10 38 double 双 精 度 型 8 1.7 10 308 ~1.7 10 308 说 明 : (1) 单 精 度 型 float 和 双 精 度 型 double 都 属 于 浮 点 型 (2)char 型 和 各 种 int 型 有 时 又 统 称 为 整 数 类 型 因 为 字 符 型 数 据 在 计 算 机 中 是 以 ASCII 码 形 式 表 示, 故 其 本 质 上 是 整 数 类 型 的 一 部 分, 也 可 以 当 作 整 数 来 运 算 (3) 各 种 数 据 类 型 的 长 度 以 字 节 为 单 位,1 个 字 节 等 于 8 个 二 进 制 位 数 2.3 常 量 与 变 量 在 程 序 运 行 过 程 中, 值 不 能 被 改 变 的 量 称 为 常 量, 值 可 以 改 变 的 量 称 为 变 量 在 C++ 程 序 中, 数 据 以 常 量 或 变 量 的 形 式 来 表 示, 每 个 常 量 或 变 量 都 有 确 定 的 数 据 类 型

第 2 章 基 本 数 据 类 型 和 表 达 式 21 2.3.1 常 量 1. 整 型 常 量 整 型 常 量 即 整 型 常 数, 没 有 小 数 部 分, 可 以 用 十 进 制 八 进 制 和 十 六 进 制 3 种 形 式 来 表 示 (1) 十 进 制 整 型 常 量 由 0~9 组 成, 没 有 前 缀, 不 能 以 0 开 始 例 如,234, 67 为 合 法 的 十 进 制 整 型 常 量 (2) 八 进 制 整 型 常 量 以 0 为 前 缀, 后 跟 由 0~7 组 成 的 整 型 常 数 例 如,0134, 076 为 合 法 的 八 进 制 整 型 常 量 (3) 十 六 进 制 整 型 常 量 以 0X 或 0x 为 前 缀, 后 跟 由 0~9 和 A~F 组 成 的 整 型 常 数 例 如, 0x2F,0xA3B4 为 合 法 的 十 六 进 制 整 型 常 量 整 型 常 量 中 的 长 整 型 用 L 或 l 作 后 缀 表 示 例 如,324L,076L 等 整 型 常 量 中 的 无 符 号 型 用 U 或 u 作 后 缀 表 示 例 如,431U,0x34DU 等 2. 浮 点 型 常 量 浮 点 型 常 量 又 称 实 型 常 量, 是 由 整 数 部 分 和 小 数 部 分 组 成 的, 只 能 用 十 进 制 表 示 浮 点 型 常 量 有 两 种 表 示 方 法 : 小 数 表 示 法 和 科 学 计 数 法 (1) 小 数 表 示 法 : 由 符 号 数 字 和 小 数 点 组 成 例 如,9.55,.25,4. 和 0.123 等 注 意 : 必 须 有 小 数 点 (2) 科 学 计 数 法 : 是 用 指 数 形 式 来 表 示 浮 点 型 常 量, 即 在 小 数 表 示 法 后 面 加 上 E 或 e 表 示 指 数 例 如,3.2E 5,7e10, 34.5e2 等 注 意 :E 或 e 的 前 面 必 须 要 有 数 字, 指 数 部 分 可 正 可 负, 但 必 须 是 整 数 3. 字 符 常 量 C++ 中 有 两 种 字 符 常 量, 即 一 般 字 符 常 量 和 转 义 字 符 常 量 (1) 一 般 字 符 常 量 一 般 字 符 常 量 是 用 一 对 单 引 号 括 起 来 的 一 个 字 符, 其 值 为 ASCII 码 值 例 如,'a','A','$' 以 及 '5' 等 都 是 合 法 的 字 符 常 量 注 意 :'a' 和 'A' 是 两 个 不 同 的 字 符 常 量 在 内 存 中, 字 符 数 据 是 以 ASCII 码 形 式 存 储 的, 以 整 数 表 示, 占 据 一 个 字 节 (2) 转 义 字 符 转 义 字 符 是 一 个 以 \ 开 头 的 特 定 字 符, 表 示 其 后 的 字 符 具 有 特 殊 意 义 例 如,'\n' 中 的 n 不 是 代 表 字 符 n, 而 是 代 表 回 车 换 行 的 意 思 常 用 的 转 义 字 符 如 表 2-2 所 示 表 2-2 C++ 的 基 本 数 据 类 型 字 符 形 式 ASCII 码 值 功 能 \0 0x00 NULL \a 0x07 响 铃 \b 0x08 退 格 (BackSpace 键 ) \t 0x09 水 平 制 表 (Tab 键 ) \f 0x0c 走 纸 换 页 \n 0x0a 回 车 换 行

22 C++ 程 序 设 计 续 表 字 符 形 式 ASCII 码 值 功 能 \v 0x0b 垂 直 制 表 \r 0x0d 回 车 ( 不 换 行 ) \\ 0x5c 字 符 \ \ 0x27 单 引 号 \ 0x22 双 引 号 \? 0x3f 问 号 \ddd 0ddd 1~3 位 八 进 制 数 所 代 表 的 字 符 \xhh 0xhh 1~2 位 十 六 进 制 数 所 代 表 的 字 符 反 斜 杠 \ 可 以 和 八 进 制 数 或 十 六 进 制 数 结 合 起 来 使 用, 以 表 示 相 当 于 该 字 符 的 ASCII 码 例 如,'\0x0a' 和 '\n' 同 义, 都 表 示 回 车 换 行 转 义 字 符 用 八 进 制 数 表 示 时, 最 多 是 三 位 数, 且 必 须 以 0 开 头, 范 围 为 '\000'~'\377' 转 义 字 符 用 十 六 进 制 数 表 示 时 是 两 位 数, 用 x 或 X 引 导, 表 示 范 围 为 '\x00'~'\xff' 4. 字 符 串 常 量 字 符 串 常 量 是 用 一 对 双 引 号 括 起 来 的 字 符 序 列 例 如,"a","123" 和 "hello" 等 都 是 字 符 串 常 量 在 C++ 中, 字 符 串 常 量 和 字 符 常 量 是 不 同 的 字 符 串 常 量 是 由 双 引 号 括 起 来 的 若 干 个 字 符, 这 些 字 符 在 内 存 中 连 续 存 储, 并 在 最 后 加 上 字 符 '\0' 作 为 字 符 串 结 束 的 标 志 例 如, 字 符 串 "HELLO" 在 内 存 中 占 连 续 6 个 内 存 单 元, 存 放 示 意 图 如 图 2-2 所 示 字 符 常 量 是 用 单 引 号 括 起 来 的 一 个 字 符, 它 在 内 存 中 只 占 一 个 字 节 所 以,"x" 和 'x' 是 不 同 的 H E L L O \0 图 2-2 字 符 串 "HELLO" 在 内 存 中 的 存 放 示 意 图 注 意 : 不 能 将 一 个 字 符 串 常 量 赋 给 字 符 常 量 例 如, 语 句 char c="abc" 是 错 误 的 5. 符 号 常 量 在 C++ 中, 可 以 用 一 个 标 识 符 来 表 示 一 个 常 数, 这 个 标 识 符 就 是 符 号 常 量 例 如, 在 求 解 圆 的 问 题 时 经 常 要 用 到 圆 周 率 π( 即 3.1415926), 如 果 用 符 号 π 表 示, 则 C++ 编 译 器 不 能 识 别 ; 如 果 用 3.1415926 表 示, 则 很 容 易 出 现 输 入 错 误 此 时, 可 以 通 过 一 个 容 易 理 解 和 记 忆 的 名 字 pi 来 代 表 圆 周 率 π, 这 样 就 不 会 发 生 上 述 问 题 pi 就 是 一 个 符 号 常 量 使 用 符 号 常 量 可 以 增 加 程 序 的 可 读 性 和 可 维 护 性 假 如 程 序 中 多 个 地 方 用 到 某 一 个 常 量, 修 改 该 常 量 时, 则 每 一 处 用 到 该 常 量 的 地 方 都 要 修 改 如 果 使 用 符 号 常 量, 则 只 需 修 改 一 个 地 方 即 可, 这 样 就 使 程 序 更 加 容 易 维 护 C++ 语 言 提 供 了 两 种 定 义 符 号 常 量 的 方 法 (1) 用 const 语 句 定 义 符 号 常 量 这 种 方 法 是 C++ 语 言 中 广 泛 采 用 的 定 义 符 号 常 量 的 方 法, 其 一 般 格 式 为 : const 数 据 类 型 符 号 常 量 = 表 达 式 ; 例 如 : const double pi = 3.1415926; 该 语 句 定 义 了 一 个 符 号 常 量 pi, 其 值 为 3.1415926

第 2 章 基 本 数 据 类 型 和 表 达 式 23 注 意 : 在 定 义 符 号 常 量 时 必 须 进 行 初 始 化, 否 则 将 出 现 编 译 错 误 (2) 用 #define 语 句 定 义 符 号 常 量 这 是 C 语 言 中 定 义 符 号 常 量 的 方 法, 其 中 #define 是 预 处 理 指 令 其 缺 点 是 不 能 显 示 声 明 常 量 的 类 型 在 C++ 语 言 中 保 留 它, 仅 仅 是 为 了 与 C 语 言 保 持 兼 容 其 一 般 格 式 为 : #define 常 量 名 常 量 值 例 如 : #define pi 3.1415926 注 意 :#define 语 句 的 最 后 不 允 许 加 分 号 ; 2.3.2 变 量 变 量 是 指 在 程 序 运 行 过 程 中, 其 值 可 以 改 变 的 量 变 量 是 有 名 字 的, 在 内 存 中 占 据 一 定 的 存 储 单 元 C++ 语 言 中 使 用 变 量 前, 必 须 先 对 它 的 数 据 类 型 进 行 说 明, 以 便 告 诉 编 译 程 序 为 变 量 分 配 多 大 的 空 间 1. 变 量 的 命 名 变 量 的 命 名 要 遵 循 C++ 语 言 中 标 识 符 的 命 名 规 定 (1) 系 统 规 定 的 关 键 字 不 可 再 作 为 变 量 名 (2) 第 一 个 字 符 必 须 是 字 母 或 下 划 线, 后 跟 字 母 数 字 或 下 划 线, 中 间 不 能 有 空 格 (3) 命 名 变 量 应 尽 量 做 到 见 名 知 意, 这 样 有 助 于 记 忆, 增 加 可 读 性 (4) 在 命 名 变 量 时, 大 小 写 字 母 是 不 一 样 的 例 如,X1 和 x1 是 两 个 不 同 的 变 量 习 惯 上 用 小 写 字 母 命 名 变 量 2. 变 量 的 定 义 变 量 定 义 的 一 般 格 式 为 : 数 据 类 型 变 量 1, 变 量 2, 其 中 数 据 类 型 可 以 是 前 面 讲 过 的 各 种 数 据 类 型, 它 决 定 了 变 量 在 内 存 中 所 占 的 存 储 单 元 数 例 如 : int x,y,z; // 定 义 了 3 个 整 型 变 量 x y z float a,b,c; // 定 义 了 3 个 单 精 度 型 变 量 a b c 在 定 义 变 量 时, 必 须 注 意 变 量 类 型 的 选 择, 应 该 保 证 该 变 量 中 将 要 存 储 的 值 不 突 破 该 变 量 类 型 所 能 表 示 的 最 大 值 当 然, 也 不 能 因 此 就 将 每 个 变 量 都 声 明 成 表 示 范 围 最 大 的 类 型, 否 则 会 白 白 浪 费 存 储 空 间 3. 变 量 赋 值 与 初 始 化 在 使 用 已 定 义 的 变 量 前, 要 用 赋 值 运 算 符 = 对 它 进 行 赋 值 例 如 : int x1,y1; x1=10;y1=20; 也 可 以 在 变 量 定 义 时 直 接 进 行 初 始 化 例 如 : int x1=10,y1=20; 在 C++ 语 言 中, 还 有 另 外 一 种 方 式 给 变 量 赋 初 值, 例 如 : int i(1) 该 语 句 定 义 了 一 个 整 型 变 量 i, 其 初 值 为 1

24 C++ 程 序 设 计 2.4 运 算 符 和 表 达 式 C++ 语 言 有 丰 富 的 运 算 符, 能 构 成 多 种 表 达 式, 几 乎 所 有 的 操 作 都 可 以 使 用 运 算 符 来 处 理 表 达 式 是 用 运 算 符 将 各 种 运 算 对 象 ( 常 数 变 量 以 及 常 量 等, 也 称 操 作 数 ) 组 合 而 成 的 在 C++ 程 序 中, 表 达 式 与 在 数 学 中 学 到 的 类 似, 是 用 于 计 算 的 式 子, 是 计 算 求 值 的 基 本 单 位 2.4.1 运 算 符 和 数 学 中 的 概 念 一 样, 运 算 是 指 对 数 据 的 求 值 计 算, 如 加 减 运 算 等 运 算 符 给 出 了 计 算 的 类 型, 而 参 与 运 算 的 数 据 叫 操 作 数 C++ 语 言 定 义 了 丰 富 的 运 算 符, 这 些 运 算 符 按 所 要 求 的 操 作 数 的 多 少, 可 分 为 单 目 运 算 符 双 目 运 算 符 和 三 目 运 算 符 ; 按 运 算 符 的 运 算 性 质, 又 可 分 为 算 术 运 算 符 关 系 运 算 符 及 逻 辑 运 算 符 等 学 习 运 算 符 时, 要 注 意 以 下 几 点 (1) 运 算 符 的 功 能, 如 加 减 乘 除 等 (2) 与 操 作 数 的 关 系, 这 里 要 注 意 运 算 符 要 求 操 作 数 的 个 数 和 类 型 如 单 目 运 算 符 只 能 有 一 个 操 作 数, 如 果 有 两 个 操 作 数 参 与 运 算 就 会 出 现 编 译 错 误 而 取 余 运 算 符 %( 或 称 取 模 运 算 符 ) 则 要 求 参 与 运 算 的 两 个 操 作 数 类 型 必 须 为 整 型 (3) 运 算 符 的 优 先 级 别 当 一 个 表 达 式 中 含 有 多 个 运 算 符 时, 先 进 行 优 先 级 高 的 运 算, 后 进 行 优 先 级 低 的 运 算 当 表 达 式 中 出 现 了 多 个 相 同 优 先 级 的 运 算 时, 运 算 的 顺 序 就 要 看 运 算 符 的 结 合 性 了 (4) 运 算 符 的 结 合 性 结 合 性 是 指 当 一 个 操 作 数 左 右 两 边 的 运 算 符 优 先 级 相 同 时, 按 什 么 顺 序 进 行 运 算, 是 自 左 向 右, 还 是 自 右 向 左 例 如, 在 表 达 式 3*5/6 中,5 的 两 边 有 两 个 优 先 级 别 相 同 的 运 算 符 * 和 /, 按 照 从 左 到 右 的 结 合 性 应 该 先 进 行 乘 法, 再 进 行 除 法, 即 操 作 数 5 与 左 边 的 运 算 符 结 合, 称 左 结 合 性 当 然,C++ 语 言 中 也 有 结 合 方 向 从 右 到 左 的, 称 右 结 合 性 表 2-3 列 出 了 常 用 运 算 符 的 优 先 级 功 能 说 明 和 结 合 性 表 2-3 C++ 中 常 用 运 算 符 的 优 先 级 功 能 说 明 和 结 合 性 优 先 级 运 算 符 功 能 说 明 结 合 性 ( ) 改 变 优 先 级 :: 作 用 域 运 算 符 1 2 [ ] 数 组 下 标 运 算 符. > 成 员 选 择. * > * 成 员 指 针 选 择 * 指 针 运 算 符 & 取 地 址 sizeof 求 内 存 字 节 数! 逻 辑 求 反 ~ 按 位 求 反 ++ -- 增 1 减 1 运 算 符 + 取 正 取 负 运 算 符 左 结 合 右 结 合

第 2 章 基 本 数 据 类 型 和 表 达 式 25 优 先 级 运 算 符 功 能 说 明 结 合 性 3 * / % 乘 法 除 法 取 余 左 结 合 4 + 加 法 减 法 左 结 合 5 << >> 左 移 位 右 移 位 左 结 合 6 < > <= >= 小 于 大 于 小 于 等 于 大 于 等 于 左 结 合 7 ==!= 等 于 不 等 于 左 结 合 8 & 按 位 与 左 结 合 9 ^ 按 位 异 或 左 结 合 10 按 位 或 左 结 合 11 && 逻 辑 与 左 结 合 12 逻 辑 或 左 结 合 13?: 条 件 运 算 符 右 结 合 14 = += = * = /= %= <<= >>= &= ^= = 赋 值 运 算 符 续 表 右 结 合 15, 逗 号 运 算 符 左 结 合 1. 算 术 运 算 符 C++ 语 言 中 的 算 术 运 算 符 包 括 基 本 算 术 运 算 符 和 增 1 减 1 运 算 符 (1) 基 本 算 术 运 算 符 基 本 算 术 运 算 符 有 :+( 取 正 或 加 ) ( 取 负 或 减 ) *( 乘 ) /( 除 ) 和 %( 取 余 ) 其 中 +( 取 正 ) ( 取 负 ) 是 单 目 运 算 符, 其 余 是 双 目 运 算 符 上 述 运 算 符 与 其 在 数 学 中 的 意 义 优 先 级 和 结 合 性 基 本 相 同 不 过 必 须 注 意 的 是 / 运 算 符, 当 它 的 两 个 操 作 数 都 是 整 数 时, 其 计 算 结 果 应 是 除 法 运 算 后 所 得 商 的 整 数 部 分 例 如,5/2 的 结 果 是 2 要 完 成 通 常 意 义 上 的 除 法, 则 两 个 操 作 数 中 至 少 有 一 个 不 为 整 型 例 如,5.0/2 的 结 果 是 2.5 取 余 运 算 符 (%) 用 来 计 算 两 个 整 数 相 除 后 的 余 数 例 如,9%4 的 结 果 是 1,4%2 的 结 果 是 0 注 意 : 要 求 取 余 运 算 符 (%) 的 两 个 操 作 数 必 须 是 整 数 或 字 符 型 数 据 (2) 增 1 减 1 运 算 符 增 1 减 1 运 算 符 都 是 单 目 运 算 符, 这 两 个 运 算 符 都 有 前 置 和 后 置 两 种 形 式 前 置 形 式 是 指 运 算 符 在 操 作 数 的 前 面, 后 置 是 指 运 算 符 在 操 作 数 的 后 面 例 如 : i++; //++ 后 置 --j; //-- 前 置 无 论 是 前 置 还 是 后 置, 这 两 个 运 算 符 的 作 用 都 是 使 操 作 数 的 值 增 1 或 减 1 但 操 作 数 和 运 算 符 组 成 的 表 达 式 不 同, 最 后 的 结 果 也 并 不 相 同 假 设 i=2,j=2, 看 下 面 的 两 个 例 子 : i++; ++j; 经 过 计 算 后, 第 一 个 表 达 式 的 值 为 2,i 值 为 3; 第 二 个 表 达 式 值 为 3,j 值 为 3 即 前 置 形 式 是 先 计 算 操 作 数 的 值 ( 增 1 或 减 1), 后 把 操 作 数 的 值 作 为 表 达 式 的 结 果 ; 而 后 置 形 式 是 先 将 操 作 数 的 值 作 为 表 达 式 的 结 果, 然 后 把 操 作 数 的 值 增 1 或 减 1 这 一 点 在 这 种 表 达 式 被 当 作 操

26 C++ 程 序 设 计 作 数 继 续 参 与 其 他 运 算 时 要 特 别 注 意 例 如, 假 设 a=5, 分 别 计 算 下 面 两 个 表 达 式 的 结 果 b = a ++ 或 b = ++ a 执 行 上 述 两 个 表 达 式 后,a 的 值 都 变 为 6, 但 b 的 值 却 不 一 样 第 一 个 表 达 式 的 结 果 为 b=5, 原 因 在 于 先 取 值 后 计 算, 表 达 式 先 将 变 量 a 的 值 赋 值 给 变 量 b, 然 后 再 增 1 第 二 个 表 达 式 的 结 果 为 b=6, 是 因 为 先 计 算 后 取 值 的 缘 故, 变 量 a 先 增 1, 然 后 再 赋 值 给 变 量 b 所 以, 尽 管 两 个 表 达 式 类 似, 但 计 算 结 果 却 不 同 在 进 行 算 术 运 算 时, 还 需 注 意 计 算 中 的 溢 出 问 题 在 计 算 机 中 每 种 基 本 数 据 类 型 都 有 一 定 的 取 值 范 围 对 于 实 数, 如 果 运 算 结 果 超 出 范 围, 程 序 将 被 异 常 中 止 另 外, 整 数 或 实 数 被 零 除 也 会 导 致 程 序 异 常 中 止 但 C++ 语 言 并 不 认 为 整 数 溢 出 是 一 个 错 误 事 实 上, 在 C++ 语 言 中 有 时 还 需 要 利 用 整 数 溢 出 来 进 行 一 些 有 目 的 的 编 程 当 然, 程 序 员 也 有 义 务 在 程 序 中 处 理 好 溢 出, 避 免 计 算 错 误 2. 关 系 运 算 符 关 系 运 算 符 用 于 比 较 两 个 操 作 数 的 大 小, 其 比 较 的 结 果 是 一 个 布 尔 型 的 值 当 两 个 操 作 数 满 足 关 系 运 算 符 指 定 的 关 系 时, 表 达 式 的 值 为 true, 否 则 为 false 在 C++ 语 言 中, 关 系 运 算 符 都 是 双 目 运 算 符, 共 有 6 个 :<( 小 于 ) <=( 小 于 或 等 于 ) > ( 大 于 ) >=( 大 于 或 等 于 ) ==( 等 于 ) 和!=( 不 等 于 ) 其 中 前 4 种 和 后 2 种 属 于 不 同 的 优 先 级, 前 4 种 的 优 先 级 高 于 后 2 种 在 C 语 言 中 没 有 布 尔 类 型, 它 采 用 整 数 1 和 0 表 示 真 和 假 C++ 语 言 中 虽 然 有 布 尔 类 型, 但 它 仍 然 继 承 了 C 语 言 的 规 定,true 等 于 1,false 等 于 0 例 如, 表 达 式 2>=3 的 结 果 为 0(false) 所 以, 关 系 运 算 符 的 比 较 结 果 可 以 作 为 算 术 运 算 中 的 操 作 数 关 系 运 算 符 的 操 作 数 可 以 是 任 何 基 本 数 据 类 型 的 数 据 但 由 于 实 数 在 计 算 机 中 只 能 近 似 地 表 示, 所 以, 一 般 不 能 直 接 进 行 相 等 比 较 当 需 要 进 行 这 样 的 比 较 时, 通 常 的 作 法 是 指 定 一 个 极 小 的 精 度 值, 当 两 个 实 数 的 差 在 这 个 精 度 之 内 时, 就 认 为 两 实 数 相 等, 否 则 认 为 不 相 等 在 使 用 关 系 运 算 符 时 还 应 注 意 以 下 两 点 (1) 不 要 把 关 系 运 算 符 = = 误 用 为 赋 值 运 算 符 = 比 如, 如 果 将 判 断 变 量 x 是 否 等 于 8 的 关 系 表 达 式 x= =8 写 成 x=8, 则 该 表 达 式 的 值 永 远 为 true( 真 ), 而 不 管 x 原 来 的 值 是 多 少 也 不 要 将 不 等 于 运 算 符!= 写 成 其 他 语 言 中 的 不 等 于 运 算 符 <> (2) 对 于 数 学 中 表 示 x 大 于 等 于 5, 且 x 小 于 等 于 20 的 数 学 关 系 式 5 x 20, 如 果 写 成 下 面 的 表 达 式 : 5 <= x <= 20 则 在 C++ 中 是 错 误 的 这 种 错 误 是 一 种 语 义 上 的 错 误, 而 不 是 语 法 上 的 错 误, 编 译 器 查 不 出 来, 编 译 时 不 会 报 告 错 误 但 运 行 时, 不 论 x 为 何 值 ( 比 如 为 3 或 60), 表 达 式 的 值 都 是 真, 所 以 这 种 错 误 较 隐 蔽, 不 易 被 发 现, 希 望 引 起 注 意 正 确 的 表 达 式 应 该 为 : 5 <= x && x <= 20 3. 逻 辑 运 算 符 逻 辑 运 算 符 共 有 3 个 :1 个 单 目 运 算 符!( 逻 辑 求 反 ), 两 个 双 目 运 算 符 &&( 逻 辑 与 ) 和 ( 逻

第 2 章 基 本 数 据 类 型 和 表 达 式 27 辑 或 ) 其 中 逻 辑 与 的 优 先 级 比 逻 辑 或 高 逻 辑 运 算 的 结 果 是 逻 辑 值 参 与 逻 辑 运 算 的 操 作 数 可 以 是 任 一 基 本 数 据 类 型 的 数 据, 在 进 行 判 断 时, 系 统 将 视 非 零 值 为 真, 零 为 假 对 于 单 目 运 算 符!( 逻 辑 求 反 ), 若 其 操 作 数 为 false(0), 则 运 算 结 果 为 true(1), 否 则 为 false(0) 例 如,!4 的 结 果 为 0 对 于 &&( 逻 辑 与 ) 运 算 符, 只 要 两 个 操 作 数 中 有 一 个 为 false(0), 运 算 结 果 就 为 false(0), 否 则 为 true(1) 例 如,3&&4 的 结 果 为 1 对 于 ( 逻 辑 或 ) 运 算 符, 只 要 两 个 操 作 数 中 有 一 个 为 true(1), 运 算 结 果 就 为 true(1), 否 则 为 false(0) 例 如,3 0 的 结 果 为 1 注 意 : 关 系 运 算 和 逻 辑 运 算 的 结 果 若 为 真, 其 值 为 1; 若 为 假, 其 值 为 0 4. 赋 值 运 算 符 C++ 中 的 赋 值 运 算 符 分 为 两 种 : 简 单 赋 值 运 算 符 和 复 合 赋 值 运 算 符 (1) 简 单 赋 值 运 算 符 简 单 赋 值 运 算 符 有 = 其 表 达 式 的 一 般 形 式 为 : 变 量 = 表 达 式 该 表 达 式 执 行 时, 先 计 算 赋 值 运 算 符 右 部 表 达 式 的 值, 然 后 将 它 赋 值 给 左 部 变 量 (2) 复 合 赋 值 运 算 符 复 合 赋 值 运 算 符 由 一 个 数 值 型 运 算 符 和 基 本 赋 值 运 算 符 组 合 而 成, 共 有 10 个, 分 别 为 +=, -=,*=,/=,%=,<<=,>>=,&=,^= 和 = 如 果 以 # 表 示 数 值 型 运 算 符, 则 复 合 赋 值 表 达 式 的 一 般 形 式 为 : 变 量 #= 表 达 式 该 表 达 式 等 价 于 : 变 量 = 变 量 # 表 达 式 即 先 用 左 部 变 量 和 右 部 表 达 式 做 数 值 运 算, 然 后 将 运 算 结 果 赋 给 左 部 变 量 例 如 : a += 5 等 价 于 a = a+5 x *=6 等 价 于 x = x * 6 m %=7 等 价 于 m = m % 7 使 用 复 合 赋 值 运 算 符 不 仅 书 写 简 练, 而 且 经 过 编 译 以 后 生 成 的 代 码 少 5. 位 运 算 符 C++ 语 言 继 承 了 C 语 言 能 进 行 位 算 的 优 点, 提 供 了 6 个 位 运 算 符 :~( 按 位 求 反 ) &( 按 位 与 ) ( 按 位 或 ) ^( 按 位 异 或 ) <<( 右 移 位 ) 和 >>( 左 移 位 ) 其 中 ~( 按 位 求 反 ) 是 单 目 运 算 符, 其 余 都 是 双 目 运 算 符 位 运 算 符 是 对 其 操 作 数 按 二 进 制 形 式 逐 位 进 行 运 算, 参 与 运 算 的 操 作 数 都 应 为 整 数, 不 能 是 实 型 数 (1)~( 按 位 求 反 ): 其 作 用 是 对 一 个 二 进 制 数 的 每 一 位 求 反, 即 0 1,1 0 (2)&( 按 位 与 ): 其 作 用 是 对 两 个 操 作 数 对 应 的 每 一 位 分 别 进 行 逻 辑 与 操 作 两 操 作 数 对 应 位 都 是 1, 则 该 位 运 算 结 果 为 1, 否 则 该 位 运 算 结 果 为 0 (3) ( 按 位 或 ): 其 作 用 是 对 两 个 操 作 数 对 应 的 每 一 位 分 别 进 行 逻 辑 或 操 作 两 操 作 数 对 应 位 中 有 1 位 是 1, 则 该 位 运 算 结 果 为 1, 否 则 该 位 运 算 结 果 为 0