Chapter12 Derived Classes



Similar documents
1 2 / 3 1 A (2-1) (2-2) A4 6 A4 7 A4 8 A4 9 A ( () 4 A4, A4 7 ) 1 (2-1) (2-2) ()

4 / ( / / 5 / / ( / 6 ( / / / 3 ( 4 ( ( 2

untitled


FY.DOC



Microsoft Word - 華藏衛視清明祭祖三時繫念法會開示_ _


1983

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

<4D F736F F D20A1D5AEDBAA4BD3ACAD64B6EAA1D6AA76C0F8A1D5C470AF66A1D6B0DFA440AABAA4E8BEAFA148A1D5A46AB6C0AFBBA1D6A8D3AA76C0F8A1D5C470AF66A1D6A641A5CEA1D5A661B6C0AFBBA142B6C0B373AFBBA1422E646F63>

才俊學校課程設計 _總目_.PDF

要 站 立 得 稳, 我 在 十 字 架 上 已 经 都 抢 夺 过 来 了, 将 魔 鬼 不 让 你 们 来 享 用 的 都 推 开 了, 这 是 让 我 们 来 得 到 的 话 语 我 们 再 也 不 被 奴 仆 的 轭 辖 制, 要 来 拥 有 才 可 以 明 知 道 却 不 去 抢 夺 过

第七讲 继承与多态


愛 的 老 天 使 五 活 動 設 計 : 活 動 設 計 一 拜 訪 老 天 使 1 活 動 名 稱 : 拜 訪 老 天 使 2 活 動 目 標 :(1) 主 動 分 享 年 節 與 長 者 相 處 的 情 景 (2) 覺 察 自 己 與 長 者 相 處 的 形 態 3 活 動 人 數 :33~3

untitled

北京东方润泽生态科技股份有限公司

zt

产 业 截 至 2015 年 底, 立 恒 工 业 广 场 竣 工 厂 房 面 积 为 万 平 方 米, 其 中 已 销 售 面 积 万 平 方 米, 占 竣 工 厂 房 面 积 的 60.93%, 已 租 赁 面 积 9.73 万 平 方 米, 占 竣 工 厂 房 面 积

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

EC( )13 第 2 頁 (b) 把 總 目 100 在 年 度 常 額 編 制 內 所 有 非 首 長 級 職 位 按 薪 級 中 點 估 計 的 年 薪 總 值 上 限 提 高 12,480,540 元, 即 由 461,070,000 元 增 至 473,550

2010年江西公务员考试行测真题

数 学 高 分 的 展 望 一 管 理 类 联 考 分 析 第 一 篇 大 纲 解 析 篇 编 写 : 孙 华 明 1 综 合 能 力 考 试 时 间 :014 年 1 月 4 日 上 午 8:30~11:30 分 值 分 配 : 数 学 :75 分 逻 辑 :60 分 作 文 :65 分 ; 总

<4D F736F F D20C1E3B5E3CFC2D4D8C4A3B0E52E646F63>

一、理事長的心聲……………………………………………

<313034A4BDB67DA4C0B56FBA5DB3E65FBD64A5BB2E786C7378>


在 上 述 物 理 模 型 中 ( 三 隻 猴 子 的 重 量 都 一 樣 ), 考 慮 底 下 四 個 問 題 : () 當 三 股 力 量 處 於 平 衡 狀 態, 而 且 F 點 處 於 ABC 的 內 部 時, 利 用 力 的 向 量 和 為 零 的 觀 念, 求 角 度 AFB, BFC,

要 求 服 装 统 一 各 队 自 带 比 赛 球 槌 队 长 及 教 练 标 志 大 会 提 供 比 赛 用 球 和 号 码 布 ( 五 ) 比 赛 所 用 球 槌 须 为 中 国 门 球 协 会 2016 年 度 专 业 器 材 供 应 商 企 业 的 产 品, 企 业 名 称 和 品 牌 请

Microsoft Word 年海南省考市场活动行测2套模拟卷1-答案版

Ps22Pdf

<4D F736F F D20322EBBF8AABDA9CAAFE1B4D5AAA2BB50A74BACCCADB7C0E3AABAAF65AF662E646F63>

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

( ) Wuhan University

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

99 cjt h 7. 0 (8 ) 0 () abc a b c abc0 aaa 0 a () bca abc0 aa0 a0 0 a0 abc a789 a b c (8 ) 9!

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



中 公 金 融 人 简 介... 2 一 中 国 农 业 银 行 风 貌 介 绍... 3 二 中 国 农 业 银 行 秋 季 招 聘 政 策 解 读 三 2014 农 业 银 行 秋 季 校 园 招 聘 笔 试 备 考 策 略 中 公 金 融 人 精 品 课 程 介 绍..


(Microsoft Word -

<4D F736F F D C4EAC8EBD1A74D4241C1AABFBCD7DBBACFB2CEBFBCB4F0B0B8BCB0CFEABDE22E646F6378>

民 國 105 年 大 專 程 度 義 務 役 預 備 軍 官 預 備 士 官 考 選 簡 章 目 錄 壹 考 選 依 據 1 貳 考 ( 甄 ) 選 對 象 1 參 資 格 規 定 1 肆 員 額 及 專 長 類 別 2 伍 報 名 及 選 填 志 願 日 期 方 式 3 陸 選 填 官 科 (

Strings

为 进 一 步 推 进 教 育 教 学 改 革, 满 足 学 生 个 性 化 学 习 需 求, 培 养 学 生 实 践 能 力 和 创 新 创 业 素 质, 在 编 制 2016 级 专 业 人 才 培 养 方 案 指 导 意 见 中, 对 原 有 文 件 关 于 印 发 <2015 级 人 才 培

<4D F736F F D20A578C657B3C8C077C0B8BB50BAD6ABD8B3C8C077C0B8B6C7A9D3A4A7BADEBF732E646F63>


<443A5C B75705CC4DAC8DD5CD2BBA1A2C6C0B9C0CEC4BCFE5C312EA1B6BDCCD3FDB2BFB0ECB9ABCCFCB9D8D3DAC8ABC3E6BFAAD5B9B8DFD6B0B8DFD7A8D4BAD0A3C8CBB2C5C5E0D1F8B9A4D7F7CBAEC6BDC6C0B9C0B5C4CDA8D6AAA1B7A3A8BDCCB8DFCCFC5B D3136BAC5A3A92E646F6

SIK) 者, 需 實 施 1 年 以 上, 經 體 格 檢 查 無 後 遺 症 者 5. 身 體 任 何 部 分 有 刺 青 紋 身 穿 耳 洞 者, 不 得 報 考, 各 項 檢 查 結 果 須 符 合 體 位 區 分 標 準 常 備 役 體 位 二 在 校 軍 訓 成 績 總 平 均 70 分

untitled

证券代码: 证券简称:航空动力 公告编号:2011临-【】

zt

江 苏 科 技 大 学 809 机 械 设 计 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 江 苏 科 技 大 学 810 机 械 原 理 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 江 苏 科 技 大 学 机 械 原

浙 江 财 经 大 学 891 统 计 学 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 浙 江 财 经 大 学 统 计 学 891 全 套 考 研 资 料...22 浙 江 财 经 大 学 高 等 数 学 601 全 套 考 研 资 料

<4D F736F F D EA16DBB50B3AFA742A4A7AED1A16EBD67A6AEA4CEA8E4C3C0B34EAF53A6E2B1B4AA522D2DB3B9A5BFA9BE5F702E34332D35345F2E646F63>

025-

第 一 部 分 目 录 销 售 管 理 规 范 汇 编... 5 Ⅰ 销 售 资 格 管 理 篇 关 于 保 险 公 司 销 售 人 员 资 格 管 理 的 规 定 关 于 银 邮 代 理 机 构 代 理 资 格 管 理 的 规 定 关 于 银 邮

042-

019-

親鸞和懺悔道的哲學

ttian

国 家 文 件 关 部 门 制 定 并 实 施 与 当 地 经 济 发 展 水 平 和 校 车 服 务 需 求 相 适 应 的 校 车 服 务 方 案, 统 一 领 导 组 织 协 调 有 关 部 门 履 行 校 车 安 全 管 理 职 责 县 级 以 上 地 方 人 民 政 府 教 育 公 安 交

苏 州 科 技 学 院 825 管 理 学 原 理 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 管 理 学 原 理 真 题 , 历 年 真 题 主 要 用 来 研 究 考 研 的 考 点, 重 点 和 出 题 思 路, 为 考 研 最 重 要


鲁 东 大 学 702 普 通 心 理 学 ( 含 发 展 心 理 学 ) 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 普 通 心 理 学 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大

一、银行结售汇业务

田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田有關田

喜 临 门 家 具 股 份 有 限 公 司 2016 年 第 二 次 临 时 股 东 大 会 会 议 议 程 会 议 召 集 人 : 公 司 董 事 会 现 场 会 议 时 间 :2016 年 6 月 16 日 ( 星 期 五 ) 下 午 14 时 现 场 会 议 地 点 : 浙 江 省 绍 兴 市

Microsoft Word - 【預官_士_考選歷屆試題86~100】.doc

盐 田 区 2015 年 社 会 建 设 行 动 计 划 2015 年 是 全 面 深 化 改 革 的 关 键 之 年 全 面 推 进 依 法 治 区 的 开 局 之 年, 也 是 十 二 五 规 划 的 收 官 之 年 十 三 五 规 划 的 谋 划 之 年 结 合 省 市 年 度 社 会 工 作

Microsoft Word 司仲敖.doc

Microsoft Word - Book 3 巫山行.doc

关于调整可充抵保证金证券的通知( )

海 军 大 连 舰 艇 学 院 807 有 机 化 学 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 有 机 化 学 笔 记, 此 笔 记 为 高 分 研 究 生 复 习 所 用, 借 助 此 笔 记 可 以 大 大 提 高 复 习 效 率, 把 握 报 考 院 校 2

027-

<4D F736F F D BEC7A67E2DB5A7B8D52DBB79A4E5AFE0A44FB4FAC5E7BEE3A658A5FE2E646F63>

Microsoft Word - Book 2 月下行.doc

太 原 科 技 大 学 811 西 方 哲 学 史 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 1-1 本 套 资 料 没 真 题 注 : 若 考 前 收 集 到 最 新 考 研 真 题, 我 们 将 免 费 邮 件 发 送 给 购 买 资 料 的 考 生, 若 考 生 自

Microsoft Word - 台東縣文學.doc

第 1 頁 C97232 第 一 部 分 : 選 擇 題 ( 佔 55 分 ) 一 單 選 題 ( 佔 34 分 ) 說 明 : 第 1 至 第 17 題, 每 題 選 出 一 個 最 適 當 的 選 項, 劃 記 在 答 案 卡 之 選 擇 題 答 案 區 每 題 答 對 得 2 分, 答 錯 或

Microsoft Word - Book 11 人道行.doc

蘇轍〈黃州快哉亭記〉析論

<4D F736F F D20BBA6CBC9BDCCC8CBA1B A1B BAC5B8BDBCFE2E646F63>

第 1 頁 C97131 第 一 部 分 : 選 擇 題 ( 佔 54 分 ) 一 單 選 題 ( 佔 36 分 ) 說 明 : 第 1 題 至 第 18 題, 每 題 選 出 一 個 最 適 當 的 選 項, 標 示 在 答 案 卡 之 選 擇 題 答 案 區 每 題 答 對 得 2 分, 答 錯

准 尧 角 色 定 位 尧 存 在 周 期 形 态 和 方 式 等 角 度 与 传 统 媒 介 环 境 进 行 比 较 袁 分 析 了 网 络 传 播 中 野 意 见 领 袖 冶 在 分 散 而 微 尧 重 局 部 事 实 细 节 真 实 尧 非 层 级 去 权 力 化 等 方 面 的 形 态 特

一 緒 論 ( 一 ) 研 究 動 機 及 目 的 中 國 唐 代 為 佛 教 發 展 輝 煌 時 期, 其 中 禪 宗 也 是 當 時 鼎 盛 流 行 的 宗 派 之 一 本 文 主 要 在 探 討 馬 祖 道 一 (709~788, 以 下 簡 稱 馬 祖 ) 所 傳 承 的 洪 州 禪 ( 又

山 东 财 经 大 学 431 金 融 学 综 合 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 金 融 学 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大 大 提 高 复 习 2-3 金

由 于 企 业 的 经 营 活 动 具 有 内 在 不 确 定 性, 某 些 财 务 报 表 项 目 不 能 精 确 计 量, 只 能 进 行 估 计 正 是 由 于 这 种 不 确 定 性, 在 会 计 实 务 中, 很 多 财 务 报 表 舞 弊 都 与 会 计 估 计 相 关 对 于 注 册

<4D F736F F D F F355FCCECB5D8BFC6BCBCB5DACEE5BDECB6ADCAC2BBE1B5DAB6FEB4CEBBE1D2E9BEF6D2E9B9ABB8E62E646F6378>

重 庆 邮 电 大 学 数 据 结 构 802 初 试 内 部 精 华 资 料 1-1 数 据 结 构 2007, 暂 无 答 案 2-1 考 研 复 习 规 划 指 导 全 年 专 业 课 复 习 计 划, 指 导 考 生 科 学 时 间 分 配, 提 高 备 考 效 率, 免 费 赠 送 2-2


红塔证券股份有限公司关于

2. 国 营 企 业 实 行 劳 动 合 同 制 暂 行 规 定 和 国 营 企 业 招 用 工 人 暂 行 规 定 1986 年 7 月 12 日, 国 务 院 发 布 国 营 企 业 实 行 劳 动 合 同 制 暂 行 规 定 和 国 营 企 业 招 用 工 人 暂 行 规 定 ( 国 发 19


Microsoft Word - _二_-1-2D研習講義-孫藝玨.doc


CIC _Appendix

Transcription:

继 承 -- 派 生 类

复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) {

2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数 据 成 员 时 前 边 要 加 关 键 字 static 来 修 饰 B) 静 态 数 据 成 员 在 类 体 外 进 行 初 始 化 C) 使 用 静 态 数 据 成 员 时, 要 在 静 态 数 据 成 员 名 前 加 < 类 名 > 和 作 用 域 运 算 符 D) 静 态 数 据 成 员 不 是 所 有 对 象 所 共 有 的 答 案 :D 错 误, 应 该 是 共 有 的 C 正 确, 可 以 是 类 名 :: 静 态 成 员 或 对 象 名. 静 态 成 员

3. 下 面 程 序 段 输 出 结 果 是? class A { static int count; A() { count++; } void f(int x) {count+=x int int A::count=1; A a; A b; b.f(5); cout << a.count << endl; int A::count=1; //count=1 A a; // count=1+1=2 A b; //count=2+1=3 b.f(5); //count=3+5=8 cout << a.count << endl; ; // 输 出 8

继 承 的 概 念 软 件 复 用 : 新 的 软 件 可 以 在 原 先 开 发 的 基 础 上 进 行 扩 充, 可 以 降 低 成 本 提 高 软 件 可 靠 性 目 前, 不 加 修 改 地 直 接 复 用 已 有 软 件 比 较 困 难 已 有 软 件 的 功 能 与 新 软 件 所 需 要 的 功 能 总 是 有 差 别 的 解 决 这 个 差 别 有 下 面 的 途 径 : 修 改 已 有 软 件 的 源 代 码, 它 的 缺 点 是 : 需 读 懂 源 代 码 可 靠 性 差 易 出 错 源 代 码 难 以 获 得 继 承 机 制 (Inheritance): 一 种 面 向 对 象 的 软 件 复 用 途 径 在 定 义 一 个 新 的 类 时, 先 把 一 个 或 多 个 已 有 类 的 功 能 全 部 包 含 进 来, 然 后 再 给 出 新 功 能 的 定 义 或 对 已 有 类 的 某 些 功 能 重 新 定 义 C++ 的 继 承 通 过 派 生 类 来 实 现

为 什 么 使 用 继 承? 目 的 在 于 为 软 件 复 用 提 供 有 效 手 段 一 方 面, 可 以 重 用 先 前 项 目 的 代 码, 还 可 以 在 此 基 础 上 进 行 修 改, 提 高 程 序 设 计 灵 活 性 另 一 方 面, 如 果 一 个 项 目 使 用 了 几 个 功 能 相 似 的 类, 可 以 通 过 派 生 类 的 继 承 性 达 到 函 数 和 数 据 的 复 用, 减 少 重 复 设 计

基 类 与 派 生 类 在 继 承 关 系 中 存 在 两 个 类 : 基 类 ( 或 称 父 类 ) 和 派 生 类 ( 或 称 子 类 ) 派 生 类 拥 有 基 类 的 所 有 特 征, 并 可 以 定 义 新 的 特 征 或 对 基 类 的 一 些 特 征 进 行 重 定 义 基 类 派 生 类 继 承 分 为 : 单 继 承 和 多 继 承 单 继 承 : 一 个 类 最 多 有 一 个 直 接 基 类 多 继 承 : 一 个 类 可 以 有 多 个 直 接 基 类

继 承 对 程 序 设 计 的 支 持 继 承 机 制 除 了 支 持 软 件 复 用 外, 它 还 具 有 下 面 的 作 用 : 对 事 物 进 行 分 类 : 层 次 结 构,is-a-kind-of

支 持 软 件 的 增 量 开 发 : 新 的 版 本 可 以 从 老 的 版 本 扩 展 和 完 善 A1 A2 A3

对 概 念 进 行 组 合 : 例 如 在 职 研 究 生 既 是 教 师, 又 是 研 究 生, 综 合 了 两 种 特 征 研 究 生 教 师 在 职 研 究 生

单 继 承 在 定 义 单 继 承 时, 派 生 类 只 能 有 一 个 直 接 基 类, 其 定 义 格 式 如 下 : class < 派 生 类 名 >:[< 继 承 方 式 >] < 基 类 名 > { < 成 员 说 明 表 > < 派 生 类 名 > 为 派 生 类 的 名 字 < 基 类 名 > 为 直 接 基 类 的 名 字 < 成 员 说 明 表 > 是 在 派 生 类 中 新 定 义 的 成 员, 其 中 包 括 对 基 类 成 员 的 重 定 义 < 继 承 方 式 > 指 出 派 生 类 的 实 例 ( 对 象 ) 用 户 以 及 派 生 类 的 派 生 类 对 该 派 生 类 的 基 类 成 员 的 访 问 控 制

class A // 基 类 { int x,y; void f(); void g(); class B: public A // 派 生 类 { int z; // 新 成 员 void h(); // 新 成 员

关 于 派 生 类 的 说 明 1. 除 了 拥 有 新 定 义 的 成 员 外, 派 生 类 还 拥 有 基 类 的 所 有 成 员 ( 基 类 的 构 造 函 数 和 赋 值 操 作 符 重 载 函 数 除 外 ) 例 如 : B b; b b.x: b.y: b.z: b.f(); //A 类 中 的 f b.g(); //A 类 中 的 g b.h(); //B 类 中 的 h

2. 定 义 派 生 类 时 一 定 要 见 到 基 类 的 定 义 class A; // 声 明 class B: public A //Error { int z; void h() { g(); } //Error, 编 译 程 序 不 知 道 基 类 中 是 否 有 函 数 g 以 及 函 数 g 的 原 型... B b; //Error, 编 译 无 法 确 定 b 所 需 内 存 空 间 的 大 小

3. 友 元 不 具 有 继 承 性 : 如 果 在 派 生 类 中 没 有 显 式 说 明, 基 类 的 友 元 不 是 派 生 类 的 友 元 ; 如 果 基 类 是 另 一 个 类 的 友 元, 而 该 类 没 有 显 式 说 明, 则 派 生 类 也 不 是 该 类 的 友 元 4. 派 生 类 不 能 直 接 访 问 基 类 的 私 有 成 员 例 如 : class A { int x,y; void f(); void g() {... x... } class B: public A { int z; void h() {... x... //Error,x 为 基 类 的 私 有 成 员 g(); //OK, 通 过 函 数 g 访 问 基 类 的 私 有 成 员 x }

同 名 成 员 的 处 理 原 则 情 况 1: 派 生 类 可 以 定 义 新 的 成 员, 也 可 以 对 基 类 成 员 重 新 进 行 定 义 如 果 在 派 生 类 中 新 定 义 的 成 员 与 基 类 的 某 个 成 员 同 名, 则 在 派 生 类 中 对 该 成 员 的 访 问 是 指 派 生 类 中 定 义 的 成 员 例 如 : class A // 基 类 { int x,y; void f() {x=1; cout<< A.f, <<x; } ; void g() {y=2; cout<< A.g, <<y; class B: public A // 派 生 类 { int x,z; //x 被 重 定 义 int f() {x=3; cout<< B.f, <<x; //f 被 重 定 义 int h() { f(); // 使 用 B 类 的 f() g(); // 使 用 A 类 的 g() cout<< B.h, <<x<<; // 输 出 B 类 的 x B b; b.f(); // 使 用 B 类 中 的 f, 输 出 B.f, 3 b.g(); // 使 用 A 类 中 的 g, 输 出 A.g, 2 b.h(); // 使 用 B 类 中 的 h, 输 出 B.f, 3 A.g, 2 B.h, 3

同 名 成 员 的 处 理 原 则 情 况 2: 如 果 派 生 类 中 定 义 了 与 基 类 同 名 的 成 员, 则 基 类 的 成 员 名 在 派 生 类 的 作 用 域 内 不 直 接 可 见 访 问 基 类 同 名 成 员 时 要 用 基 类 名 受 限 例 如 : class B: public A { int z; void f(); void h() { f(); //B 类 中 的 f A::f(); //A 类 中 的 f } B b; b.f(); //B 类 中 的 f b.a::f(); //A 类 中 的 f

同 名 成 员 的 处 理 原 则 情 况 3: 即 使 派 生 类 中 定 义 了 与 基 类 同 名 但 参 数 不 同 的 成 员 函 数, 基 类 的 同 名 函 数 在 派 生 类 的 作 用 域 中 也 是 不 直 接 可 见 的 class B: public A { int z; void f(int); void h() { f(1); //OK f(); //Error A::f(); //OK }... B b; b.f(1); //OK b.f(); //Error b.a::f(); //OK

继 承 方 式 在 C++ 中, 派 生 类 拥 有 基 类 的 所 有 成 员 问 题 是 : 基 类 的 成 员 变 成 派 生 类 的 什 么 成 员 呢 (public private 或 protected)? 上 面 的 问 题 由 继 承 方 式 决 定 继 承 方 式 在 定 义 派 生 类 时 指 定 : class < 派 生 类 名 >:[< 继 承 方 式 >] < 基 类 名 > { < 成 员 说 明 表 > 继 承 方 式 可 以 是 :public private 和 protected 默 认 的 继 承 方 式 为 :private

继 承 方 式 的 含 义 继 承 方 式 派 生 类 基 类 public private protected public public 不 可 直 接 访 问 protected private private 不 可 直 接 访 问 private protected protected 不 可 直 接 访 问 protected 派 生 类 对 基 类 成 员 的 访 问 权 原 则 (1) 对 基 类 私 有 数 据 不 可 见 (2) 以 最 小 的 权 限 为 准

例 : 派 生 类 的 访 问 权 限 class A { void a(); protected: void b(); private: void c(); 1. 公 有 派 生 : class B: public A { void d(); // 在 B 类 里,a() 和 d() 是 public,b() 是 protected,c() 不 可 见 B x; x.a(); //OK 2. 保 护 派 生 : class B: protected A { void d(); // 在 B 类 里,d() 是 public, a(),b() 是 protected,c() 不 可 见 B x; x.a(); //error,a() 是 protected 3. 私 有 派 生 : class B: private A { void d(); // 在 B 类 里,d() 是 public, a(),b() 是 private,c() 不 可 见 B x; x.a(); //error,a() 是 private 不 管 以 何 种 派 生 方 式,B 类 都 可 以 访 问 A 类 的 a() 和 b(), 不 可 访 问 c()

继 承 方 式 的 调 整 在 派 生 类 中, 可 以 通 过 访 问 声 明 来 调 整 访 问 权 限 在 任 何 继 承 方 式 中, 除 了 基 类 的 private 成 员, 都 可 进 行 访 问 控 制 调 整 调 整 的 方 法 :[public : protected : private] 基 类 名 ::< 基 类 成 员 名 >, 例 如 class A { void f1(); void f2(); protected: void g1(); void g2() private: void p1(); } class B: private A { A::g1; A::p1; //Error,private 成 员 不 允 许 调 整 protected: A::f2; A::g2; private: A::f1; }

思 考 : 派 生 类 中 如 何 访 问 基 类 的 私 有 数 据? 方 法 1: 通 过 基 类 的 接 口 ( 公 有 函 数 ) 来 访 问 方 法 2: 把 基 类 的 private 数 据 改 成 protected 方 法 3: 将 派 生 类 或 其 成 员 函 数 声 明 为 基 类 的 友 元, 例 如 class B; class A { private: int x; friend class B; // 或 friend B::f(); } class B: public A { void f() { x=3 }

封 装 与 继 承 的 矛 盾 在 派 生 类 中 定 义 新 的 成 员 时, 往 往 需 要 用 到 基 类 的 一 些 private 成 员 ( 矛 盾 ) 在 继 承 机 制 中, 一 个 类 的 成 员 有 两 种 被 外 界 使 用 的 场 合 : 通 过 类 的 对 象 使 用 在 派 生 类 中 使 用 在 C++ 中, 提 供 了 另 外 一 种 类 成 员 访 问 控 制 : protected, 用 它 说 明 的 成 员 不 能 被 对 象 使 用, 但 可 以 在 派 生 类 中 使 用 protected 访 问 控 制 缓 解 了 封 装 与 继 承 的 矛 盾

class A { protected: int x,y; void f(); class B: public A {... void h() { f(); //OK... x... //OK... y... //OK } void f() { A a; a.f(); //OK... a.x... //Error... a.y... //Error }

派 生 类 对 象 的 初 始 化 派 生 类 对 象 的 初 始 化 由 基 类 和 派 生 类 共 同 完 成 : 基 类 的 数 据 成 员 由 基 类 的 构 造 函 数 初 始 化, 派 生 类 的 数 据 成 员 由 派 生 类 的 构 造 函 数 初 始 化 当 创 建 派 生 类 的 对 象 时, 派 生 类 的 构 造 函 数 在 进 入 其 函 数 体 之 前 会 去 调 用 基 类 的 构 造 函 数 默 认 情 况 下, 调 用 基 类 的 默 认 构 造 函 数, 如 果 要 调 用 基 类 的 非 默 认 构 造 函 数, 则 必 须 在 派 生 类 构 造 函 数 的 成 员 初 始 化 表 中 指 出 原 则 : 先 祖 先 ( 基 类 ), 再 客 人 ( 成 员 对 象 ), 后 自 己 ( 派 生 类 )

class A { int x; A() { x = 0; } A(int i) { x = i; } class B: public A { int y; B() { y = 0; } B(int i) { y = i; } B(int i, int j):a(i) { y = j; }... B b1; // 执 行 A::A() 和 B::B(),b1.x 等 于 0,b1.y 等 于 0 B b2(1); // 执 行 A::A() 和 B::B(int),b2.x 等 于 0,b2.y 等 于 1 B b3(1,2); // 执 行 A::A(int) 和 B::B(int,int),b3.x 等 于 1, //b3.y 等 于 2

如 果 一 个 类 D 既 有 基 类 B 又 有 成 员 对 象 类 M, 则 在 创 建 D 类 对 象 时, 构 造 函 数 的 执 行 次 序 为 : B->M->D 当 D 类 的 对 象 消 亡 时, 析 构 函 数 的 执 行 次 序 为 : D->M->B

例 : 利 用 一 个 线 性 表 类 实 现 一 个 队 列 类 线 性 表 由 若 干 元 素 构 成, 元 素 之 间 有 线 性 的 次 序 关 系 class LinearList {... bool insert( int x, int pos ); bool remove( int &x, int pos ); int element( int pos ) const; int search( int x ) const; int length( ) const;

队 列 是 一 种 特 殊 的 线 性 表, 插 入 操 作 在 一 端, 删 除 操 作 在 另 一 端 又 称 先 进 先 出 表 (First In First Out,FIFO) Queue 的 实 现 ( 继 承 ): class Queue: private LinearList { bool en_queue(int x) { return insert(x,length()); } bool de_queue(int &x) { return remove(x,1); }

小 结 继 承 的 概 念 为 什 么 使 用 继 承? 派 生 类 的 声 明 和 使 用 同 名 成 员 的 处 理 原 则 继 承 方 式 和 访 问 权 限 派 生 类 对 象 的 初 始 化 利 用 线 性 表 类 实 现 一 个 队 列 类

复 习 1. 下 面 关 于 友 元 的 描 述 中, 错 误 的 是 A) 友 元 函 数 可 以 访 问 该 类 的 私 有 数 据 成 员 B) 一 个 类 的 友 元 类 中 的 成 员 函 数 都 是 这 个 类 的 友 元 函 数 C) 友 元 可 以 提 高 程 序 的 运 行 效 率 D) 类 与 类 之 间 的 友 元 关 系 可 以 继 承 答 案 :D 错 误, 友 元 关 系 不 可 继 承, 不 对 称, 也 不 可 传 递

2. 下 列 对 派 生 类 的 描 述 中, 错 误 的 是 A) 一 个 派 生 类 可 以 作 另 一 个 派 生 类 的 基 类 B) 派 生 类 至 少 有 一 个 基 类 C) 派 生 类 的 成 员 除 了 它 自 己 的 成 员 外, 包 含 了 它 的 基 类 的 成 员 D) 派 生 类 中 继 承 的 基 类 成 员 的 访 问 权 限 到 派 生 类 保 持 不 变 答 案 :D

3. 下 面 程 序 段 输 出 结 果 是? class A // 基 类 { int x,y; int f() {x=1; return x} ; int g() {y=2; return y class B: public A // 派 生 类 { int x,z; int f() {y=3; return y; int h() { x=f()+g()+y; return x B b; cout<<b.h(); 解 答 : 根 据 同 名 处 理 的 原 则, 调 用 h() 函 数 时,f() 使 用 B 的 f, 返 回 3, g() 使 用 A 的 g, 返 回 2,y 等 于 2, 故 f()+g()+y=3+2+2=7

4. 下 列 A,B,C,D 处 函 数 调 用 正 确 的 是 : class A { void a(); protected: void b(); private: void c(); class B: private A { void d(); A::b; class C protected B { void f() { A) a(); B) b(); C) c(); D) d(); } } 解 答 : 类 B: d 和 b, private: a,c 不 可 见 类 C:protected d,b, 其 他 不 可 见 所 以 B,D 正 确,A,C 错 误

子 类 型 子 类 型 : 如 果 一 个 类 型 S 是 另 一 个 类 型 T 的 子 类 型, 则 对 用 T 表 达 的 所 有 程 序 P, 当 用 S 去 替 换 程 序 P 中 的 所 有 T 时, 程 序 P 的 功 能 不 变 一 个 类 型 的 操 作 也 适 合 于 它 的 子 类 型 以 及 一 个 子 类 型 的 值 可 以 赋 值 或 作 为 函 数 参 数 传 给 基 类 型 变 量 继 承 可 以 实 现 子 类 型 : 派 生 类 可 以 看 成 是 基 类 的 子 类 型 子 类 型 的 作 用 : 发 给 基 类 对 象 的 消 息 也 能 发 给 派 生 类 对 象 在 需 要 基 类 对 象 的 地 方 可 以 用 派 生 类 对 象 去 替 代

例 如, 假 设 A 是 基 类,B 是 A 的 派 生 类,f 是 A 的 成 员 函 数,g 是 B 的 成 员 函 数 A a,*p; B b,*q; b.f(); // 如 果 B 中 有 f, 则 调 用 B 的 f; 否 则 调 用 A 的 f a = b; // 用 b 去 改 变 a 的 状 态, 属 于 B 但 不 属 于 A 的 数 据 成 员 将 被 忽 略 p = &b; //A 类 指 针 p 指 向 B 类 对 象 b b = a; //Error, 它 将 导 致 b 有 不 确 定 的 成 员 数 据 (a 中 没 有 这 些 数 据 ) q = &a; //Error, 它 将 导 致 通 过 q 向 a 发 送 它 不 能 处 理 的 消 息, 如 :q->g();

多 继 承

多 继 承 对 于 下 面 的 两 个 类 A 和 B: class A { int m; void fa(); class B { int n; void fb(); 如 何 定 义 一 个 类 C, 它 包 含 A 和 B 的 所 有 成 员, 另 外 还 拥 有 新 的 数 据 成 员 r 和 成 员 函 数 fc?

用 单 继 承 实 现 : class C: public A { int n,r; void fb(); void fc(); 或 者 class C: public B { int m,r; void fa(); void fc(); 不 足 之 处 : 概 念 混 乱 易 造 成 不 一 致

用 多 继 承 实 现 : class C: public A, public B { int r; void fc();

多 继 承 是 指 派 生 类 可 以 有 一 个 以 上 的 直 接 基 类 多 继 承 的 派 生 类 定 义 格 式 为 : class < 派 生 类 名 >: [< 继 承 方 式 >] < 基 类 名 1>, { < 成 员 说 明 表 > [< 继 承 方 式 >] < 基 类 名 2>, 继 承 方 式 及 访 问 控 制 的 规 定 同 单 继 承 派 生 类 拥 有 所 有 基 类 的 所 有 成 员 基 类 的 声 明 次 序 决 定 : 对 基 类 构 造 函 数 / 析 构 函 数 的 调 用 次 序 对 基 类 数 据 成 员 的 存 储 安 排

多 继 承 的 初 始 化 多 继 承 的 构 造 函 数 的 调 用 顺 序 : (1) 先 祖 先 ( 基 类 ), 再 客 人 ( 成 员 对 象 ), 后 自 己 ( 派 生 类 ) (2) 多 个 基 类 的 初 始 化 顺 序 : 按 照 定 义 的 顺 序 来 区 分 先 后 析 构 函 数 和 构 造 函 数 相 反

class A { int m; void fa(); class B { int n; void fb(); class C: public A, public B { int r; void fc();... C c;

对 象 c 的 内 存 空 间 布 局 是 : c A::m B::n C::r 构 造 函 数 的 执 行 次 序 是 : A() B() C() 员 初 始 化 表 中 调 用 ) 下 面 的 操 作 是 合 法 的 : c.fa(); c.fb(); c.fc(); (A() 和 B() 实 际 是 在 C() 的 成

多 继 承 中 的 同 名 问 题 ( 二 义 性 ) class A {... void f(); void g(); class B {... void f(); void h(); class C: public A, public B {... void func() { f(); //Error, 是 A 的 f, 还 是 B 的 f? }... C c; c.f(); //Error, 是 A 的 f, 还 是 B 的 f?

解 决 名 冲 突 的 办 法 是 : 基 类 名 受 限 class C: public A, public B {... void func() { A::f(); //OK, 调 用 A 的 f B::f(); //OK, 调 用 B 的 f }... C c; c.a::f(); //OK, 调 用 A 的 f c.b::f(); //OK, 调 用 B 的 f

重 复 继 承 -- 虚 基 类 多 继 承 会 造 成 重 复 继 承 问 题 : 下 面 的 类 D 从 类 A 继 承 两 次, 称 为 重 复 继 承 class A { int x;... class B: public A {... class C: public A {... class D: public B, public C {... 重 复 继 承 会 带 来 二 义 性 : 上 面 的 类 D 将 包 含 两 个 x 成 员 : B::x 和 C::x 为 什 么 要 使 用 虚 基 类? 可 以 消 除 重 复 继 承 造 成 的 二 义 性

虚 基 类 的 概 念 和 定 义 虚 基 类 的 概 念 当 在 多 条 继 承 路 径 上 有 一 个 公 共 的 基 类, 这 个 公 共 的 基 类 就 会 产 生 多 个 实 例, 若 只 想 保 存 这 个 基 类 的 一 个 实 例, 可 以 将 这 个 公 共 基 类 声 明 为 虚 基 类 定 义 方 法 : 基 类 前 加 上 virtual 关 键 字 例 : 如 果 需 要 类 D 中 只 有 一 个 x, 则 应 把 A 定 义 为 B 和 C 的 虚 基 类 : class B: virtual public A {... class C: virtual public A {... class D: public B, public C {...

虚 基 类 的 初 始 化 虚 基 类 的 初 始 化 和 一 般 多 继 承 的 初 始 化 语 法 一 样, 但 构 造 函 数 调 用 次 序 不 同 构 造 函 数 的 调 用 次 序 虚 基 类 的 构 造 函 数 优 先 于 非 虚 基 类 构 造 函 数 调 用 若 同 一 层 次 包 含 多 个 虚 基 类, 则 按 照 他 们 的 声 明 先 后 顺 序 调 用 若 虚 基 类 由 非 虚 基 类 派 生 而 来, 则 仍 然 先 调 用 基 类 构 造 函 数, 再 调 用 派 生 类 构 造 函 数

例 : 虚 基 类 的 初 始 化 class A { int x; A(int i) { x = i; } class B: virtual public A { int y; B(int i): A(1) { y = i; } class C: virtual public A { int z; C(int i): A(2) { z = i; }

class D: public B, public C { int m; D(int i, int j, int k): B(i), C(j), A(3) { m = k; } class E: public D { int n; E(int i, int j, int k, int l): D(i,j,k), A(4) { n = l; }... D d(1,2,3); // 这 里,A 的 构 造 函 数 由 D 调 用,d.x 初 始 化 为 3 调 用 的 构 造 函 数 及 它 们 的 执 行 次 序 是 : A(3) B(1) C(2) D(1,2,3) E e(1,2,3,4); // 这 里, A 的 构 造 函 数 由 D 调 用,e.x 初 始 化 为 4 调 用 的 构 造 函 数 及 它 们 的 执 行 次 序 是 : A(4) B(1) C(2) D(1,2,3) E(1,2,3,4)

类 作 为 模 块 在 面 向 对 象 程 序 中, 可 以 把 一 个 类 当 作 一 个 模 块, 也 可 以 把 多 个 具 有 继 承 关 系 的 类 作 为 一 个 模 块 一 个 C++ 模 块 一 般 由 两 个 源 文 件 构 成, 一 个 是.h 文 件, 另 一 个 是.cpp 文 件 对 于 一 个 由 类 构 成 的 C++ 模 块, 它 的.h 文 件 中 存 放 的 是 类 的 定 义,.cpp 文 件 中 存 放 的 是 类 成 员 函 数 的 定 义 ( 实 现 )

//modele2.h class A { int I,j; void h(); void f(); void h(); } //module2.cpp #include module2.h ; void A::f() { i h() } void A::g() { } void A::h() { } //modele1.cpp int main() { A a; a.f(); a.g(); }

Demeter 法 则 良 好 的 程 序 设 计 风 格 过 程 式 结 构 化 程 序 设 计 对 象 式? 良 好 的 对 象 程 序 设 计 风 格 的 目 标 是 降 低 模 块 间 的 耦 合 度, 增 强 模 块 的 可 复 用 性 和 易 维 护 性 Demeter 法 则 : 一 个 类 的 成 员 函 数 除 了 能 访 问 自 身 类 结 构 的 直 接 子 结 构 ( 表 层 子 结 构 ) 外, 不 能 以 任 何 方 式 依 赖 于 任 何 其 他 类 的 结 构 ; 并 且 每 个 成 员 函 数 只 应 对 应 于 某 个 有 限 类 集 合 中 的 对 象 发 送 消 息 自 身 类 结 构 的 直 接 子 结 构 : 指 本 类 的 数 据 成 员 成 员 对 象 类 的 数 据 成 员 不 包 含 在 内

小 结 子 类 型 多 继 承 概 念 初 始 化 两 种 二 义 性 和 解 决 办 法 同 名 冲 突 问 题 : 类 名 受 限 重 复 继 承 问 题 : 虚 基 类 类 作 为 模 块 Demeter 法 则