Microsoft Word - chap13.doc



Similar documents
Microsoft Word - 第四章.doc

6-1-1極限的概念

所 3 學 分 課 程, 及 兩 門 跨 領 域 課 程 共 6 學 分 以 上 課 程 學 生 在 修 課 前, 必 須 填 寫 課 程 修 課 認 定 表, 經 班 主 任 或 指 導 教 授 簽 名 後 始 認 定 此 課 程 學 分 ) 10. 本 規 章 未 盡 事 宜, 悉 依 學 位

第 6. 節 不 定 積 分 的 基 本 公 式 我 們 可 以 把 已 經 知 道 反 導 函 數 之 所 有 函 數 都 視 為 不 定 積 分 的 基 本 公 式 基 本 公 式 涵 蓋 的 範 圍 愈 大, 我 們 求 解 積 分 就 愈 容 易, 但 有 記 憶 不 易 的 情 事 研 讀

實德證券網上交易系統示範

Microsoft Word doc

長跨距暨挑高建築特殊結構系統之調查分析

Microsoft PowerPoint - 資料庫正規化(ccchen).ppt

簽 呈

PROSPECT EXPLORATION 壹 前 言 第 9 卷 第 2 期 中 華 民 國 100 年 2 月

研究一:n人以『剪刀、石頭、布』猜拳法猜拳一次,決定一人勝

肆 研 究 方 法 進 行 本 研 究 前, 我 們 首 先 對 研 究 中 所 用 到 名 詞 作 定 義 定 義 : 牌 數 : 玩 牌 時 所 使 用 到 撲 克 牌 數 次 數 : 進 行 猜 心 術 遊 戲 時, 重 複 分 牌 次 數 數 : 進 行 猜 心 術 遊 戲 時, 每 次 分

Microsoft Word - Draft circular on Sub Leg Apr (chi)_Traditional

CONTENTS 訓 練 內 容 設 計 法 056 淡 季 期 的 訓 練 058 旺 季 期 的 訓 練 060 針 對 爬 坡 賽 的 訓 練 內 容 062 賽 後 的 資 料 分 析 PART4/ 鏑 木 毅 先 生 的 建 言 活 用 於 越 野 路 跑 的 心 跳 訓

骨 折 別 日 數 表 1. 鼻 骨 眶 骨 ( 含 顴 骨 ) 14 天 11. 骨 盤 ( 包 括 腸 骨 恥 骨 坐 骨 薦 骨 ) 40 天 2. 掌 骨 指 骨 14 天 12. 臂 骨 40 天 3. 蹠 骨 趾 骨 14 天 13. 橈 骨 與 尺 骨 40 天 4. 下 顎 ( 齒

<4D F736F F D20B3E6A4B830312D2D2DBCC6BD75BB50BEE3BCC6AABAA55BB4EEB942BAE22E646F6378>

證 券 簡 易 下 單 :2121 證 券 簡 易 下 單 1. 主 工 具 列 的 視 窗 搜 尋 器 直 接 輸 入 點 擊 主 選 單 證 券 專 區 下 單 特 殊 下 單 2121 證 券 簡 易 下 單 畫 面 說 明 1. 下 單 區 2. 個 股 行 情 資 訊 與

75 叁 積 木 遊 戲 的 教 學 功 能 一 促 進 體 能 發 展 二 發 展 社 會 技 巧 Ramsey 1991 Beaty 1995 ( ) ( ) ( ) 三 學 習 情 緒 處 理 國 教 之 友 第 59 卷 第 3 期 19

目 錄 壹 題 目 1: 新 增 商 品 ( 商 品 名 稱 為 玉 井 芒 果 乾 禮 盒 )... 3 貳 題 目 2: 新 增 商 品 ( 商 品 名 稱 為 紅 磚 布 丁 精 選 禮 盒 )... 5 參 題 目 3: 新 增 商 品 ( 商 品 名 稱 為 晶 鑽 XO 醬 禮 盒 ).

e-Submission System Quick Reference Guide for Publication Related Matters (Chinese version)

四 修 正 幼 兒 園 師 資 類 科 應 修 學 分 數 為 四 十 八 學 分, 並 明 定 學 分 數 抵 免 之 相 關 規 定 及 規 範 修 習 幼 兒 園 教 育 專 業 課 程 之 最 低 年 限 ( 修 正 條 文 第 五 條 ) 五 發 給 修 畢 師 資 職 前 教 育 證 明

授 課 老 師 章 節 第 一 章 教 學 教 具 間 3 分 鐘 粉 筆 CNC 銑 床 教 學 內 容 CNC 銑 床 之 基 本 操 作 教 材 來 源 數 值 控 制 機 械 實 習 Ⅰ 1. 了 解 CNC 銑 床 的 發 展 2. 了 解 CNC 銑 床 刀 具 的 選 用 3. 了 解

sle cover 1

目 錄 項 目 內 容 頁 數 1 手 機 要 求 3 2 登 記 程 序 3 3 登 入 程 序 4 4 輸 入 買 賣 指 示 6 5 更 改 指 示 14 6 取 消 指 示 18 7 查 詢 股 票 結 存 21 8 查 詢 買 賣 指 示 23 9 更 改 密 碼 查 詢 股

(Microsoft Word - MOODLE990201\266i\266\245\244\342\245U )

16

二 兒 歌 選 用 情 形 ( ) 2 ( ) ( )

NCKU elearning Manual

五 四 五 說 ( 代 序 ) 李 澤 厚 劉 再 復 I I II IV V VII 第 一 篇 五 四 新 文 化 運 動 批 評 提 綱 附 論 一 中 國 貴 族 精 神 的 命 運 ( 提 綱 )

第一章 緒論

章節

支 持 機 構 : 社 會 文 化 司 主 辦 機 構 : 澳 門 學 聯 澳 門 青 年 研 究 協 會 電 話 : 傳 真 : 網 址 : 報 告 主 筆 : 李 略 博 士 數 據 錄

人 們 在 為 生 活 空 間 中 的 物 品 選 擇 色 彩 時, 不 自 覺 地 會 反 應 出 大 腦 對 色 彩 的 解 釋, 設 計 師 若 能 掌 握 色 彩 所 隱 藏 的 訊 息, 便 可 以 充 分 利 用 並 創 造 出 極 具 魅 力 的 產 品 視 覺 對 知 覺 的 影 響

前 項 第 三 款 所 定 有 機 農 產 品 及 有 機 農 產 加 工 品 驗 證 基 準, 如 附 件 一 第 七 條 驗 證 機 構 受 理 有 機 農 產 品 及 有 機 農 產 加 工 品 之 驗 證, 應 辦 理 書 面 審 查 實 地 查 驗 產 品 檢 驗 及 驗 證 決 定 之

268 別 行 政 區 所 以, 全 國 人 民 代 表 大 會 根 據 憲 法 第 31 條 規 定 設 立 了 特 別 行 政 區 沒 有 憲 法 第 31 條 的 規 定, 就 沒 有 特 別 行 政 區 制 度 存 在 的 合 法 性 基 礎 62 正 如 上 述, 憲 法 為 特 別 行

Microsoft PowerPoint - F263-CH10.ppt [相容模式]

奇 妙 的 24 摘 要 從 撲 克 牌 中 隨 機 抽 取 4 張 牌 可 以 有 1820 種 牌 組, 在 這 1820 種 牌 組 中, 有 1362 組 可 經 由 四 則 運 算 的 方 式, 算 出 24 點, 有 458 組 無 解 快 速 求 解 的 方 法 有 相 加 法 因 數

PowerPoint 簡報

Microsoft Word - ch07


「家加關愛在長青」計劃完成表現及評估報告

瑞興銀行

格 成 績 證 明 第 六 條 第 七 條 本 系 大 四 課 程 中 規 劃 日 本 韓 國 越 南 專 題 研 究, 學 生 需 於 大 四 時 修 習 該 課 程, 並 於 規 定 期 間 內 提 出 專 題 報 告, 取 得 合 格 成 績 證 明 本 系 規 定 學 生 畢 業 時 需 取

內 政 統 計 通 報


心 五 四 運 動 二 十 一 世 紀 的 生 活 主 張

Microsoft Word - 全華Ch2-05.doc

治 療 方 式 與 研 究 方 向

xls

寫 作 背 景 導 讀 [98] L Lyman Frank Baum

<4D F736F F D20B2C433B3B92020B971B8F4A4C0AA52A7DEA5A9>


校 長 遴 選 者 就 相 關 遴 選 事 項, 有 程 序 外 之 接 觸 遴 選 會 委 員 在 任 期 間 因 故 無 法 執 行 任 務 或 有 不 適 當 之 行 為 者, 由 各 該 主 管 機 關 解 聘 之 ; 其 缺 額, 依 第 一 項 至 第 五 項 規 定 聘 ( 派 ) 委

C CH4.tpf

如何正確使用自己所擁有的正版音樂光碟?

投影片 1


3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

(Microsoft Word - IAS26_0106_\270\352\270\333__\272\364\255\266.doc)

第二組掃描器規範書

Microsoft PowerPoint - 104年說明會簡報-final-0923.ppt [相容模式]

教育實習問與答:

修 課 特 殊 規 定 : 一 法 律 系 學 生 最 低 畢 業 學 分 128;101 學 年 度 修 讀 法 律 系 雙 主 修 學 生 應 修 畢 法 律 專 業 目 64 學 分 ( 限 修 習 本 校 法 律 系 開 設 課 程, 不 得 以 原 學 系 或 外 校 課 程 抵 免 -

CHRISTIAN ALLIANCE CHENG WING GEE COLLEGE

第 2 頁 理 由 現 行 計 劃 3. 現 時, 學 生 如 欲 在 考 試 費 減 免 計 劃 下 申 領 考 試 費 減 免, 必 須 符 合 以 下 資 格 - (a) 首 次 應 考 香 港 中 學 會 考 ( 下 稱 會 考 ) 1 或 香 港 高 級 程 度 會 考 ( 下 稱 高 考

會 員 專 區 使 用 手 冊 目 錄 一 基 本 介 紹 會 員 專 區 登 入 位 置 主 畫 面 與 網 站 架 構 : 功 能 導 覽 列 說 明 :... 3 二 DOI 查 詢 與 維 護... 4 三 DOI 註 冊 期 刊 類 型...


Microsoft Word - 立法會十四題附件.doc

壹、組織編制 代碼:C0101意見反映

128 提 示 樞 紐 分 析 表 的 用 途 樞 紐 分 析 表 是 指 可 以 用 來 快 速 合 併 和 比 較 大 量 資 料 的 互 動 式 表 格, 透 過 它 可 以 詳 細 分 析 數 值 資 料, 特 別 適 用 於 下 列 情 況 : 需 要 從 含 有 大 量 資 料 的 清

Microsoft Word - 小論文-變性狗問卷調查.doc

課 程 簡 介 第 一 章 基 本 電 路 理 論 第 二 章 半 導 體 物 理 與 pn 接 面 二 極 體 元 件 分 析 第 三 章 二 極 體 電 路 分 析

行政院金融監督管理委員會全球資訊網-行政院金融監督管理委員會

一、 資格條件:

1

教 師 相 關 ( 升 等, 依 業 務 需 002 交 通 管 科 評 鑑, 評 量, 徵,C031, 聘, 各 項 考 試 委 C051,C054, 員, 通 訊 錄 等 ),C057, C058,C063 各 項 會 議 紀 錄 依 業 務 需 C001,, 002,130 交 通 管 科 (

二零零六至零七年施政報告

目 錄 頁 1. 歡 迎 使 用 網 上 預 約 面 談 訪 問 系 統 新 用 戶 新 用 戶 登 入 帳 戶 程 序 啟 動 網 上 預 約 面 談 訪 問 帳 戶 核 對 帳 戶 的 地 址 資 料

Microsoft Word - 雲林區_免試平台_國中模擬選填_操作手冊.doc

BSP 烤箱 - 封面-2

PART 2 系 統 篇 仔 細 檢 查 記 憶 體 和 顯 示 卡 AIDA64 Everest 操 作 : 使 用 AIDA64 檢 測 主 機 溫 度 AIDA64 DirectX AIDA

55202-er-ch03.doc

國中數學基本學習內容補救教材 第二冊

(Microsoft Word \260\352\266T\250t\245\273\246\354\275\322\265{\267\247\255z_new_.doc)

關 於 教 育 部 學 習 拍 立 得 教 育 部 於 (103) 年 度 整 合 各 縣 市 政 府 部 屬 機 構 大 學 及 民 間 的 數 位 資 源 與 服 務, 依 不 同 類 型, 分 別 匯 集 於 教 育 大 市 集 教 育 百 科 教 育 媒 體 影 音 教 育 部 學 習 拍

(Microsoft Word - \246\250\301Z\272\336\262z.doc)

調 查 背 景 去 年 年 尾 奶 粉 供 應 緊 張 有 零 售 商 大 幅 抬 價 的 報 導 和 投 訴 在 每 兩 個 月 進 行 的 定 期 嬰 幼 兒 奶 粉 價 格 調 查 以 外, 在 農 曆 新 年 前 後, 特 別 加 強 奶 粉 供 應 和 價 格 的 調 查 工 作 2

國立屏東師範學院教育心理與輔導研究所

<30332EAAFEA5F3A440A142A447A142A454A142A57CA147BEC7A5CDB14DB77EC3D2B7D3BEC7B2DFA661B9CF2E786C73>

行政院金融監督管理委員會全球資訊網-行政院金融監督管理委員會

2 2.1 A H ir@abchina.com 2

( 第 4 項 ) 第 1 項 及 第 2 項 投 資 抵 減 之 適 用 範 圍 核 定 機 關 申 請 期 限 申 請 程 序 施 行 期 限 抵 減 率 及 其 他 相 關 事 項, 由 行 政 院 定 之 行 為 時 促 進 產 業 升 級 條 例 第 6 條 第 2 項 及 第 4 項 分

Microsoft Word - LongCard_Promo_2013_FAQ_tc_pdf.doc

(Microsoft Word - \244\361\301\311\263W\253h\244\316\255p\244\300\257\ \(1\))

LP 電腦週邊設備用品_第一組印表機規範書

untitled

2016年中國語文科試卷三聆聽及綜合能力考核樣本試卷示例及說明

(Microsoft Word \245\277\244\361\273P\244\317\244\361.doc)

Microsoft Word - 附表二

life930106

Transcription:

101 13. More on Inheritance in C++ 13.1 Virtual Bases and Diamond Hierarchies 13.1.1 Virtual Bases and Constructor Diamond hierarchies 為 C++ 多 重 繼 承 之 一 大 問 題 程 式 範 例 : oop_ex116.cpp 對 於 此,C++ 提 供 了 virtual base 之 方 式 來 解 決, 例 如 以 下 之 繼 承 架 構,Y 與 T 繼 承 X 時, 最 好 將 X 宣 告 為 virtual base, 避 免 重 複 繼 承 造 成 ambiguous, 其 作 法 為 於 宣 告 繼 承 時 使 用 virtual 關 鍵 字 : X Y Z T W U class Y : virtual public X. 如 Y 與 T 均 將 X 宣 告 為 virtual base, 則 同 時 繼 承 了 Y 與 T 的 類 別 其 中 只 有 一 份 X 物 件, 由 Y 與 T 共 享, 例 如 U 之 物 件 中 具 有 Y 與 T 物 件,Y 與 T 共 有 一 份 X 物 件

102 但 如 將 X 宣 告 為 virtual base, 則 X 下 的 所 有 衍 生 類 別, 無 論 是 direct 或 indirect 繼 承 它, 其 建 構 函 式 均 需 要 明 確 地 呼 叫 X 的 建 構 函 式 如 非 virtual base class, 衍 生 類 別 是 不 能 呼 叫 其 indirect base class 的 建 構 函 式, 只 能 透 過 呼 叫 immediate base class 的 建 構 函 式 來 間 接 引 用 (invoke) 以 初 始 化 indirect base class 的 資 料 成 員, 故 如 X 非 virtual base, 則 Z W 與 U 的 建 構 函 式 不 能 呼 叫 X 的 建 構 函 式, 但 如 X 為 virtual base, 則 Z W 與 U 的 建 構 函 式 均 必 須 明 確 地 呼 叫 X 的 建 構 函 式 程 式 範 例 : oop_ex117.cpp,oop_ex118.cpp 注 意 要 點 : 1. 架 構 中 每 個 類 別 的 建 構 函 式 均 必 須 明 確 地 呼 叫 X 的 建 構 函 式 2. 當 Y 類 別 宣 告 其 基 本 類 別 X 為 virtual, 則 繼 承 Y 之 衍 生 類 別 Z 的 建 構 函 式 對 Y 建 構 函 式 之 引 用, 將 忽 略 其 中 對 X 建 構 函 式 之 引 用 3. U 只 包 含 了 一 個 X 物 件, 由 Y 與 T 共 享, 故 X::print( ) 不 會 造 成 ambiguous call 4. TA 只 包 含 了 一 個 Person 物 件, 故 原 oop_ex116.cpp 中 ambiguous calls 均 不 會 發 生 13.1.2 Virtual Bases and Copy Constructor 由 於 virtual base 的 產 生 將 使 的 其 下 各 層 類 別 的 建 構 函 式 均 需 要 明 確 地 呼 叫 virtual base 的 建 構 函 式, 故 此 形 成 的 規 則, 是 virtual base 下 各 層 類 別 的 拷 貝 建 構 函 式 均 需 要 明 確 地 呼 叫 virtual base 的 拷 貝 建 構 函 式 程 式 範 例 : oop_ex119.cpp 13.1.3 Virtual Bases and Copy Assignment Operators 我 們 可 看 到 將 基 本 類 別 宣 告 為 virtual base 將 影 響 到 其 下 direct 或 indirect 衍 生 類 別 的 建 構 函 式 的 定 義 方 式, 包 括 拷 貝 建 構 函 那 拷 貝 指 定 運 算 子 應 為 何? 程 式 範 例 : oop_ex120.cpp 注 意 要 點 :

103 1. 拷 貝 指 定 運 算 子 非 建 構 函 式 2. 拷 貝 指 定 運 算 子 不 受 基 本 類 別 是 否 為 virtual base 所 影 響 3. 執 行 U 之 拷 貝 指 定 運 算 子,U 物 件 中 之 x 資 料 成 員 將 分 別 被 W 與 T 之 拷 貝 指 定 運 算 子 設 定 其 值 兩 次 4. 如 U 之 拷 貝 指 定 運 算 子 中 沒 有 呼 叫 W 之 拷 貝 指 定 運 算 子, 觀 察 執 行 之 結 果 5. Y 與 T 之 拷 貝 指 定 運 算 子 寫 法 不 同, 但 功 能 完 全 相 同 13.1.4 Summary for Diamond Hierarchies 先 前 的 Diamond Hierarchies 繼 承 架 構 雖 於 設 計 上 較 直 觀, 但 卻 有 需 將 基 本 類 別 宣 告 為 virtual base 的 必 要, 此 使 得 程 式 難 以 延 伸 發 展 (extend) Main Disadvantages of OO Design That Involves Diamond Hierarchies: 1. Difficult to extend existing code. 2. Excessively rigid categorization. 3. Type conversion inefficiencies. 13.2 Mixin Classes Mixin class 為 只 有 純 虛 擬 函 式 (pure virtual function) 所 構 成 的 類 別, 其 有 如 Java 的 Interface, 其 作 用 是 規 定 / 賦 與 繼 承 其 之 衍 生 類 別 需 有 的 能 力 ( 之 函 式 原 型 ), 繼 承 其 之 衍 生 類 別 必 須 對 其 所 定 義 之 純 虛 擬 函 式 提 出 實 作, 才 能 實 體 化 程 式 範 例 : oop_ex121.cpp Project 2 問 題 二 的 Mixin class 參 考 : oop_ex122.cpp 使 用 Mixin class 之 設 計 雖 比 先 前 的 Diamond Hierarchies 繼 承 架 構 要 有 彈 性, 但 仍 有 以 下 缺 點 Main Disadvantages of OO Design Based on Mixin Classes: 1. Excessively rigid categorization.

104 2. Type conversion inefficiencies. 13.3 Type Conversion Inefficiencies 假 設 某 大 學 部 學 生 完 成 了 其 大 學 學 業, 並 準 備 進 入 研 究 所, 成 為 研 究 生, 究 程 式 的 觀 點, 我 們 想 要 達 成 的 是, 將 原 來 為 Student 之 物 件, 轉 換 成 為 GraduateStudent 之 物 件, 並 為 其 新 加 入 屬 於 GraduateStudent 之 資 料 首 先 就 將 Student 之 物 件 轉 換 成 為 GraduateStudent 之 物 件 而 言, 雖 GraduateStudent 為 Student 之 衍 生 類 別, 但 就 物 件 的 轉 換 上, 並 沒 有 記 憶 體 操 作 上 有 效 的 方 法, 以 下 為 可 能 的 方 式 之 一 GraduateStudent* CreateGraduateStudentFromStruent( Student* donestudent, Department newdepartment, Teacher& theadvisor ) GraduateStudent * gp = new GraduateStudent( donestudent->getname( ), donestudent->getidentification( ), donestudent->getbirthdate( ), donestudent->getaddress( ), donestudent->getstudentstatus( ), newdepartment, theadvisor ); delete donestudent; return gp; 以 下 為 另 一 個 方 法, 但 與 上 面 的 方 法 一 樣 沒 效 率 GraduateStudent* CreateGraduateStudentFromStruent( Student* donestudent, Department newdepartment, Teacher& theadvisor )

105 //first create an empty GraduateStudent Object GraduateStudent * gp = new GraduateStudent( 0, // name 0, // ssn 0, // birthdate 0, // address eunknown, // studentstatus newdepartment, theadvisor ); Student* tsp = gp; *tsp = *donestudent; delete donestudent; return gp; 13.4 OO Design Using Role Playing Classes 使 用 Role Playing Classes, 即 是 以 has a 取 代 is a 關 係 來 設 計, 某 個 Person 可 以 有 一 個 以 上 的 角 色 物 件, 角 色 物 件 則 定 義 了 此 類 角 色 應 ( 可 ) 有 的 能 力, 擁 有 某 角 色 物 件 即 具 有 扮 演 此 類 角 色 應 有 的 能 力, 例 如 某 人 為 TA, 則 其 為 同 時 擁 有 Student 與 Teacher 此 兩 個 Role Playing Classes 的 Person 物 件, 具 有 Student 物 件 則 有 enrollforclass 等 能 力, 具 有 Teacher 物 件 則 有 teachforclass 等 能 力 假 設 某 大 學 部 學 生 完 成 了 其 大 學 學 業, 並 準 備 進 入 研 究 所, 成 為 研 究 生, 我 們 只 要 將 此 Person 物 件 其 角 色 (UniversityMember* 成 員 所 指 物 件 ) 由 原 為 Student 之 物 件, 改 成 GraduateStudent 之 物 件 即 可, 不 需 改 變 原 為 Person 型 態 物 件 之 型 別, 亦 不 需 拷 貝 Person 物 件 其 他 非 角 色 之 資 料 成 員 使 用 Role Playing Classes 之 設 計, 所 有 Role Playing Classes 的 物 件 在 擁 有 者 物 件 中 均 是 以 基 本 類 別 的 指 標 來 參 照, 例 如 Student Teacher 等 物 件, 於 Person 中 均 是 以 UniversityMember 的 指 標 來 定 位 問 題 在 於, 對 於 一 個 物 件, 我 們 如 何

106 得 知 其 是 否 具 有 某 種 角 色, 而 有 此 角 色 之 能 力 例 如 對 於 某 Person 物 件, 我 們 須 能 知 道 其 是 否 具 有 Student 之 角 色, 有 的 話 才 能 修 課 13.4.1 dynamic_cast Operation of RTTI C++ 之 Run Time Type Identification (RTTI) 可 用 於 此 一 判 斷, 假 設 我 們 想 知 道 某 個 UniversityMember 指 標 所 指 的 物 件 是 否 為 Student 之 物 件, 我 們 可 使 用 C++ 之 RTTI 所 提 供 之 dynamic_cast 運 算 如 下 Student* st = dynamic_cast<student*>(um); 其 中 um 為 UniversityMember* 之 型 態, 如 um 所 指 的 物 件 非 Student, 則 dynamic_cast 傳 回 0 例 : void enrollstudentincourse(const Courses& newcourse, Person* astudent) UniversityMember* role = astudent.getactiverole( ); Student* studentptr = dynamic_cast<student*>(role); if(studentptr!= 0) studentptr->enrollforcourse( newcourse); else cout<< The person is not a student. Cannot enroll in a course. <<endl; 程 式 範 例 : oop_ex123.cpp 注 意 要 點 : 1. 欲 使 用 RTTI, 有 些 編 譯 器 需 先 啟 動 RTTI 功 能, 例 如 Visual C++, 其 設 定 為 : Project->Settings->C/C++->Category 選 擇 C++ Language-> 勾 選 Enable RTTI 2. Dynamic casts 只 可 作 用 於 polymorphic types( 具 有 至 少 一 個 virtual function 的 類 別 ) 此 並 非 真 正 的 問 題, 因 為 如 沒 有 任 何 虛 擬 函 式, 至 少 可 將 其 解 構 函

107 式 宣 告 為 virtual 3. Dynamic casts 只 能 用 於 某 繼 承 架 構 中 之 類 別 間 的 轉 換 4. 除 指 標 型 態 外,Dynamic casts 也 可 作 用 於 物 件 之 參 考 (object references), 但 此 轉 換 只 能 於 try-catch 區 塊 中 使 用, 例 如 : void f(universitymember& roleref) try Student& studentref = dynamic_cast<student&>(roleref); // if flow of control gets here, that means yes, the true identity of // the object refered by roleref is indeed a Student. // So it can be enrolled for a course. catch(bad_cast& b) // means the object refered by roleref is not a Student. // so do something here. 5. C++ 之 RTTI 機 制 同 時 提 供 了 static_cast 運 算 子 以 供 型 別 之 轉 換, 其 為 強 制 的 靜 態 轉 換, 此 常 會 有 問 題, 例 如 我 們 自 然 可 用 其 將 Derived* 轉 成 Base*, 但 其 亦 可 做 強 制 的 downcasting 將 Base* 轉 成 Derived*, 不 像 dynamic_cast 會 根 據 物 件 的 實 際 型 態 判 斷 此 轉 換 是 否 可 行 6. C++ 之 RTTI 機 制 的 另 一 個 casting operator 為 reinterpret_cast, 其 主 要 作 用 是 將 某 int 轉 換 成 記 憶 體 位 址 13.4.2 typeid of RTTI RTTI 之 typeid 函 式, 可 得 到 某 物 件 所 屬 類 別 之 type_info, 以 用 於 判 斷 某 物 件 實 際 為 何 種 類 別, 或 兩 物 件 是 否 實 際 為 同 類 別 等 比 較 程 式 範 例 : oop_ex124.cpp 注 意 要 點 : 1. 欲 使 用 typeid, 需 引 用 <typeinfo.h> 2. 其 輸 入 參 數 可 以 是 物 件 ( 例 如 *(ab)), 或 者 類 別 名 稱 ( 例 如 printable), 傳 回 值 是 一 個 指 向 type_info 物 件 的 參 考,type_info 物 件 是 一 個 系 統 支 援 的 物 件,

108 代 表 一 種 類 別 3. 由 type_info 物 件 之 name 函 式 成 員 所 傳 回 的 字 串 是 由 系 統 所 保 有, 無 法 由 delete 所 釋 放 4. 其 對 物 件 所 屬 類 別 之 判 斷 不 具 多 型 之 行 為, 例 如 printandscaleable 之 物 件 非 printable 之 物 件,typeid 對 輸 入 物 件 之 傳 回 值 只 有 一 個, 即 其 實 際 所 屬 類 別 之 type_info 物 件 5. typeid 對 輸 入 類 別 名 稱 之 傳 回 值 即 此 類 別 之 type_info 物 件 Project 2 問 題 三 的 參 考 範 例 : oop_ex125.cpp