運算子多載 Operator Overloading

Similar documents
Template

運算子多載 Operator Overloading

Strings

運算子多載 Operator Overloading

c_cpp

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

untitled

ebook39-5

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

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

Microsoft Word cppFinalSolution.doc

CC213

untitled

FY.DOC

Microsoft PowerPoint - 11_Templates.ppt

第二章 簡介類別

目 錄

untitled

Scott Effective C++ C++ C++ Roger Orr OR/2 ISO C++ Effective Modern C++ C++ C++ Scoot 42 Bart Vandewoestyne C++ C++ Scott Effective Modern C++ Damien

Microsoft Word - 物件導向編程精要.doc

Microsoft PowerPoint - 10 模板 Template.pptx

第3章.doc

汉 籍 中 瓯 脱 一 词 应 为 匈 奴 语 的 汉 语 译 音 那 么 其 语 意 究 竟 何 指 对 此 古 今 史 家 展 开 了 广 泛 讨 论 概 括 起 来 不 外 有 四 种 说 法 第 一 瓯 脱 为 边 界 上 的 防 卫 设 施 索 隐 引 汉 人 服 虔 曰 作 土 室 以

中 国 经 济 史 研 究 年 第 期 也 有 成 为 个 体 商 贩 者 例 如 永 茂 和 商 号 的 创 始 人 李 永 茂 开 店 以 前 曾 在 缅 甸 八 募 与 腾 冲 之 间 以 肩 挑 马 驮 贩 运 商 品 为 生 稍 有 积 累 便 在 缅 甸 抹 谷 开 设 店 铺 成 为

历 史 人 物 研 究 中 的 翻 案 问 题 界 强 烈 反 响 这 篇 文 章 是 蔡 剧 塑 造 的 曹 操 形 象 的 基 础 他 称 曹 操 是 了 不 起 的 历 史 人 物 曹 操 对 于 民 族 的 发 展 和 文 化 的 发 展 有 大 的 贡 献 在 同 时 代 人 中 贡 献

投 资 与 中 国 的 对 外 开 放 联 系 起 来 并 敏 锐 地 点 明 了 中 国 现 行 的 公 有 制 与 华 侨 投 资 的 私 有 制 关 系 的 实 质 性 问 题 这 是 他 率 先 为 中 国 对 外 开 放 打 开 的 一 个 突 破 口 为 以 后 大 规 模 利 用 外

issue27.indd

Chapter12 Derived Classes

山东建筑大学学分制管理规定(试行)

C++ 程式設計

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

untitled

untitled

新版 明解C++入門編

Microsoft Word - ch04三校.doc

Strings

untitled

Microsoft Word - 送報伕2.doc

申 请 律 师 执 业 许 可 初 审 服 务 指 南 目 录 一 办 理 要 素 ( 一 ) 事 项 名 称 和 编 码 4 ( 二 ) 实 施 机 构 4 ( 三 ) 申 请 主 体 4 ( 四 ) 受 理 地 点 4 ( 五 ) 办 理 依 据 4 ( 六 ) 办 理 条 件 5 ( 七 )

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

环 境, 我 在 巩 固 在 校 期 间 所 学 习 的 理 论 知 识 的 同 时, 不 断 的 充 实 己, 利 用 业 余 时 间 主 动 学 习 专 业 知 识, 技 能, 把 理 论 联 系 到 工 作 实 践 中 作 为 一 名 工 作 生 活 中 的 党 员, 我 始 终 注 意 与

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

<4D F736F F D A67EABD7A4BAB3A1B1B1A8EEA8EEABD7A6DBA6E6B5FBA6F4AD70B5652E646F63>

统计工作情况汇报

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

目 录 第 一 章 地 方 陪 同 导 游 人 员 服 务 程 序...1 第 一 节 地 方 陪 同 导 游 人 员 的 概 念 与 职 责...1 第 二 节 服 务 准 备...2 一 熟 悉 接 待 计 划...2 二 落 实 接 待 事 宜...5 三 物 质 和 知 识 的 准 备...

走 吧, 到 三 峡 去 : 那 里 是 我 们 先 人 用 生 命 之 血 打 造 的 家 园 走 吧, 到 三 峡 去 : 那 里 的 浪 涛 承 载 过 千 百 万 只 我 们 先 人 驶 向 今 天 的 航 船 走 吧, 到 三 峡 去 : 那 里 的 每 一 座 青 山 都 刻 满 了 我

6寸PDF生成工具

Microsoft Word - N011 斷翅天使

中 国 科 学 院 国 家 科 学 图 书 馆

申论写作套路万能模板

( 地 ( ) 组 织 机 构 代 码 企 业 详 细 名 称 哈 密 地 伊 吾 新 疆 广 汇 新 能 源 有 限 公 司 玛 纳 斯 玛 纳 斯 祥 云 化 纤 有 限 公 司 玛 纳 斯 玛 纳 斯 澳 洋 科 技 有 限 责

图 文 聚 焦 国 培 计 划 (2013) 甘 肃 省 农 村 小 学 音 乐 骨 干 教 师 短 期 集 中 培 训 9 月 4 日 开 班 了, 学 员 老 师 们 从 甘 肃 省 各 个 县 市 州 汇 聚 湖 南 一 师, 开 始 了 为 期 14 天 的 培 训 学 习 : 鲜 明 的

申請機構基本資料

申請機構基本資料

附件1

~2~

,,

untitled

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Strings

避孕篇

第七讲 继承与多态

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

PowerPoint Presentation

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

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

1 行 业 发 展 不 平 衡 我 国 房 地 产 中 介 服 务 业 起 步 较 晚, 专 业 分 工 程 度 和 国 外 发 达 国 家 相 比 还 有 很 大 差 距 房 地 产 中 介 服 务 行 业 的 发 展 水 平 与 房 地 产 开 发 行 业 的 市 场 化 水 平 密 切 相 关

汇集全球21位医生的经验和智慧,总结出最实用的专业建议,这些都是最值得你牢记的健康提醒

1.5招募说明书(草案)

第一章

C 1

【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课


nooog

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

礼仪玉和葬玉

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

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

校园之星

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

CC213

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

ROP_bamboofox.key

3.1 num = 3 ch = 'C' 2

提问袁小兵:

chp6.ppt

1

踏出C++的第一步

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

ebook55-13

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

untitled

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++;

概述

Transcription:

函數樣板 (Function Template) 與 類別樣板 (Class Template) 講師 : 洪安 1 資料結構與 C++ 程式設計進階班

為何需要通用函數? (1/2) int abs(int x) { return (x>0)?x:-x; 取名困難不好記 float fabs(float x) { return (x>0)?x:-x; complex cabs(complex x) { return (x>0)?x:-x; 2 資料結構與 C++ 程式設計進階班

為何需要通用函數? (2/2) int abs(int x) { return (x>0)?x:-x; [overloading] 同樣的東西為何要寫三次? float abs(float x) { return (x>0)?x:-x; complex abs(complex x) { return (x>0)?x:-x; 3 資料結構與 C++ 程式設計進階班

利用函數樣板來實現通用函數的理想 當有一組函數 : (1) 內容一樣 (2) 參數資料型態不同 把資料型態當參數傳過去 int abs(int x) { return (x>0)?x:-x; float abs(float x) { return (x>0)?x:-x; complex abs(complex x) { return (x>0)?x:-x; 建立函數模板 4 資料結構與 C++ 程式設計進階班

函數樣板的定義方式 關鍵字 1 int T abs( int T x) { 2 return (x>0)?x:-x; 3 函數模板 1 template <class T> 2 T abs( T x) { 3 return (x>0)?x:-x; 4 5 資料結構與 C++ 程式設計進階班

函數樣板的使用 1 template <class T> 2 T abs( T x) { 3 return (x>0)?x:-x; 4 5 int main() { 6 int a = 3; float b=-2.83; complex c(-5, -2) ; 7 cout << abs(a) << endl ; 8 cout << abs(b) << endl ; 9 cout << abs(c) << endl ; 10 system( pause ); 11 return 0; 12 6 資料結構與 C++ 程式設計進階班

編譯器到底做了甚麼? 1 template <class T> 2 T abs( T x) { 3 return (x>0)?x:-x; 4 5 int main() { 6 int a = 3; float b=-2.83; complex c(-5, -2) ; 7 cout << abs(a) << endl ; 8 cout << abs(b) << endl ; 9 cout << abs(c) << endl ; 10 int abs(int x) { return (x>0)?x:-x; 自動產生 float abs(float x) { return (x>0)?x:-x; 自動產生 7 資料結構與 C++ 程式設計進階班 complex abs(complex x) { return (x>0)?x:-x;

另一種函數樣板的使用 1 template <class T> 2 T abs( T x) { 3 return (x>0)?x:-x; 4 5 int main() { 6 // int a = 3; float b=-2.83; complex c(-5, -2) ; 7 cout << abs(3) << endl ; 8 cout << abs(2.83) << endl ; // T=?? 9 cout << abs(complex(-5, -2)) << endl ; 10 system( pause ); 11 return 0; 12 8 資料結構與 C++ 程式設計進階班

通用的 swap() void swap(int& x, int& y) { int temp=x; x=y; y=temp; void swap(double& x, double& y) { int main( ) { int a = 5, b =3 ; double d1=3.4, d2=5.6 ; swap(a, b); swap(d1, d2) swap(f1, f2) ; system( pause ); return 0; 9 資料結構與 C++ 程式設計進階班

通用的 print_arr void main( ) { int x[] = {1,2,3 ; double y[] = {1.1,2.2,3.3; print_arr(x, 3) ; // 印出 1 2 3 print_arr(y, 3); // 印出 1.1 2.2 3.3 system( pause ); return 0; 10 資料結構與 C++ 程式設計進階班

範例 : 通用的 max(a,b) [ 寫法一 ] template <class T> T max_kha (T a, T b) { return (a>b)?a:b; int main() { cout << max_kha(5, 3) << endl; cout << max_kha(-3.14, 5.2) <<endl; cout << max_kha(2.3, 5) <<endl ; // 可乎? system( pause ); return 0; 11 資料結構與 C++ 程式設計進階班

範例 : 通用的 max(a,b) [ 寫法二 ] template <class T1, class T2> T1 max(t1 a, T2 b) { return (a>b)?a:b; void main() { cout << max(5, 3) << endl; cout << max(-3.14, 5.2) <<endl; cout << max(5, 7.8) <<endl ; // 印出啥? 12 資料結構與 C++ 程式設計進階班

觀察 使用 Function Template 只是少打字而已, 可執行檔的大小並未減低 兩種不同型態的 input, 如何決定回傳值的型態? 13 資料結構與 C++ 程式設計進階班 From: http://www.cplusplus.com/doc/tutorial/templates.html

[Note1]: template <class T> 的 scope template <class T> T abs(t x) {. template <class T> T max(t a, T b) {.. 樣板一 樣板二 14 資料結構與 C++ 程式設計進階班

[Note2]: 換不換行沒關係 template <class T> T abs(t x) {. template <class T> T abs(t x) {. 15 資料結構與 C++ 程式設計進階班

[Note3]: 樣板參數的宣告的變化 // type name 隨你取 template <class Atype> Atype abs(atype x) {. // class 可用 typename 取代 template <typename Atype> Atype abs(atype x) {. 16 資料結構與 C++ 程式設計進階班

[Note4]: template <.> 與函數定義間 不可有任何指令 template <class Atype> const int x=18 ; // error Atype abs(atype x) {. 17 資料結構與 C++ 程式設計進階班

[Note5]: 函數樣板與樣板函數 template <class T> T abs( T x) { return (x>0)?x:-x; 函數樣板 (Function Template) int abs(int x) { return (x>0)?x:-x; 18 float abs(float x) { return (x>0)?x:-x; 樣板函數 (Template Function) 產生函數 (Generated Function) frac abs(frac x) { return (x>0)?x:-x;

函數呼叫規則 (Rules of Function Invocation) ( 一 ) ( 請練習 ) template <class T> T add(t x, T y) { cout << F1 ; return x+y ; int add(int x, int y) { cout << F2 ; return x+y ; int main() { cout << add(3,8) << endl ; return 0; Q: 實際上呼叫了哪一個 function? 5_Practice.cpp 19 資料結構與 C++ 程式設計進階班

函數呼叫規則 ( 二 ) ( 請練習 ) template <class T1, class T2> T1 add(t1 x, T2 y) { cout << F1 ; return x+y ; int add(int x, int y) { cout << F2 ; return x+y ; int main() { cout << add(3.5, 8) << endl ; return 0; Q: 實際上呼叫了哪一個 function? 修改 5_Practice.cpp 20 資料結構與 C++ 程式設計進階班

函數呼叫規則 ( 三 ) template <class T> T add(t x, T y) { cout << F1 ; return x+y ; template <class T1, class T2> T1 add(t1 x, T2 y) { cout << F2 ; return x+y ; int main() { cout << add(3,8) << endl ; return 0; Q: 實際上呼叫了哪一個 function? 修改 5_Practice.cpp 21 資料結構與 C++ 程式設計進階班

為何需要通用類別 (Generic Class) // 你厭倦了為不同的 type 寫 class 嗎? class char_stack{ char data[10] ;... ; class int_stack {int data[10];... ; class complex_stack{complex data[10];...;... 我需要通用的 stack 類別 22 資料結構與 C++ 程式設計進階班

23 類別樣板 (Class Template) template <class T> class stack { private: int T data[10] ; int top, size ; public: stack():top(-1),size(10) { stack(const stack& s) { for (int i=0 ; i<10; i++) data[i] = s.data[i] ; top = s.top ; int T pop( ) { return data[top--] ; void push( Tint x) { data[++top] = x ; void print() { for(int i=0;i<top;i++) cout<<data[i]<<endl; ;

類別樣板的使用 int main( ) { stack<int> s1; s1.push(5) ;.. stack<float> s2 ; s2.push(3.14) ; stack<complex> s3 ;.. stack<int> s4(s1) ; Return 0; Q1: s1, s2 and s3 的資料型態為何? Q2: 編譯時會發生甚麼事? 24 資料結構與 C++ 程式設計進階班

定義在類別樣板外的成員函數 回想 class stack { private: int data[10] ; int top, size ; public: stack():top(-1),size(10) { int pop( ) { return data[top--] ; void push( int x) ; ; void stack::push( int x) { data[++top] = x ; 25 資料結構與 C++ 程式設計進階班

定義在類別樣板外的成員函數 template <class T> class stack {. void push(t x) ; // 如何定義 push() ; void stack::push(t x) { data[++top] = x; void stack<t>::push(t x) {data[++top] = x ; 26 正確版本 template <class T> void stack<t>::push(t x) {data[++top] = x ;

重新定義 Stack Template template <class T> class stack { private: T data[10] ; int top, size ; public: stack(); T pop( ); void push(t x); ; 27 資料結構與 C++ 程式設計進階班

課堂練習 (1/2) 測試 stack template:5_stack.cpp int main() { int i; stack<int> s1 ; for (i = 0 ; i<5; i++) s1.push(i) ; s1.print() ; stack<char> s2 ; for (i = 0 ; i<5; i++) s2.push('a'+i) ; s2.print() ; system("pause"); return 0; 28 資料結構與 C++ 程式設計進階班

課堂練習 (2/2) 通用二維座標 :5_2DPoint.cpp // 改寫為 class template 使 main 中的程式碼可以運作 class point { int x, y ; public: point(int a, int b) { x = a; y=b; void print() { cout << x << << y ; ; void main() { point<double> p1(3.5, 6.3) ; point<int> p2(3, 9) ; 29 資料結構與 C++ 程式設計進階班