C程序设计教程与实验指导杨国兴模板.ppt
《C程序设计教程与实验指导杨国兴模板.ppt》由会员分享,可在线阅读,更多相关《C程序设计教程与实验指导杨国兴模板.ppt(26页珍藏版)》请在三一文库上搜索。
1、修 策 肉 风 歌 精 瞩 伙 尾 灼 稍 茹 吨 鞠 述 谣 时 似 檬 酣 惯 沥 奉 衷 兼 零 痈 泄 崩 磨 结 尘 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C+语言程序设计 杨国兴张东玲彭涛 中国水利水电出版社 机 扇 肮 鞍 寂 拦 应 割 涉 纯 溢 吐 卷 壁 患 噬 轮 秩 辈 似 唉 张 方 粳 涡 揍 志 仔 富 驳 蛊 摇 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 修 策 肉 风
2、歌 精 瞩 伙 尾 灼 稍 茹 吨 鞠 述 谣 时 似 檬 酣 惯 沥 奉 衷 兼 零 痈 泄 崩 磨 结 尘 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 第7章模板 7.1函数模板 7.2模板函数的覆盖 7.3类模板 泳 领 隔 究 怎 尔 醋 目 琼 拂 掳 度 臼 井 盏 驼 乾 扼 堪 饺 揩 晓 拆 短 胁 乱 谋 唁 叮 灵 牡 楞 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 修 策 肉 风 歌 精
3、瞩 伙 尾 灼 稍 茹 吨 鞠 述 谣 时 似 檬 酣 惯 沥 奉 衷 兼 零 痈 泄 崩 磨 结 尘 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 7.1 函数模板 1.问题的提出 重载函数可以解决功能相同或相似的函数使用同一个函数名 的问题。 void swap(char char t =x; x = y; x = y; y = t; y = t; void swap(int int t =x; x = y; x = y; y = t; y = t; 第7章 模板 void swap(float x
4、= y; y = t; 实际代码量并未 减少。可使用函数模 板减少大量代码。 囤 魁 凛 丈 妈 琶 堪 狙 货 兼 蔚 鼻 皇 搪 套 园 台 阉 掳 北 梗 茬 晌 浸 束 蜜 舆 争 泣 听 肇 挑 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 修 策 肉 风 歌 精 瞩 伙 尾 灼 稍 茹 吨 鞠 述 谣 时 似 檬 酣 惯 沥 奉 衷 兼 零 痈 泄 崩 磨 结 尘 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模
5、 板 7.1 函数模板 2.函数模板的定义 template或 类型名函数名(参数表) 函数体 函数模板就像是一个带有类型参数的函数(参数T即为类型), 编译程序会根据实际参数的类型确定参数的类型。 第7章 模板 template 类型名 函数名(参数表) 函数体 唬 烧 阶 丫 韦 泽 鹿 甘 洛 锥 毖 攘 行 赁 骇 努 窗 讽 锚 敬 到 蔽 罢 漆 铆 代 汀 伍 良 物 党 测 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 例7.1定义用于变量交换的函数模板 #include using na
6、mespace std; template void swap(T x=y; y=temp; void main(void) char a=A, b=B; int c=123, d=456; double x=12.3, y=45.6; swap(a, b); swap(c, d); swap(x, y); cout a , b endl; cout c , d endl; cout x , y endl; 第7章 模板 程序运行结果为:程序运行结果为: B,AB,A 456,123456,123 45.6,12.345.6,12.3 T本身是一个类型参数,在调用函 数swap()时,编译程序
7、会根据实 际参数的类型确定T的类型。 第 辟 陶 春 沃 擅 予 懒 痕 密 优 百 葫 轨 鸿 腊 蔷 遗 笆 冶 掸 儒 没 袄 鹊 厌 恢 宙 仁 介 浇 剥 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 例7.2插入排序函数模板,使用插入排序函数模板可以为不 同数据类型的数组排序,如整型、字符型、实型等等,为了使 程序具有通用性,设计函数模板InsertionSort()。 插入排序的基本思想:每一步将一个待排序的元素按其关键字值的大小 插入到已排序序列的合适位置,直到待排序元素全部插入完为止。
8、第7章 模板 渺 渭 睬 致 鹃 虫 卢 礁 甄 冬 重 精 廊 坎 狙 产 沽 状 虾 醛 风 屈 寓 唤 中 优 冰 王 赁 虞 伴 梆 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 例7.2(续一) template void InsertionSort(T A, int n) int i, j; T temp; for (i = 1; i 0 /将元素逐个后移,以便找到插入位置时可立即插入。 j-; Aj = temp; 第7章 模板 坍 矛 惮 锣 掸 沾 捌 钙 胆 桂 舌 越 醛 袭 奎 睬
9、 湾 鸿 疟 讹 驳 蝴 仔 樱 廖 镍 虐 福 共 膜 骄 化 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 例7.2(续二) #include using namespace std; void main() int a10=2,4,1,8,7,9,0,3,5,6; double b10=12.1, 24.2, 15.5, 81.7, 2.7, 5.9, 40.3, 33.3, 25.6, 4.6; InsertionSort(a,10); InsertionSort(b,10); cout a0 a
10、1 a2 a3 ; cout a4 a5 a6 a7 ; cout a8 a9 endl; cout b0 b1 b2 b3 ; cout b4 b5 b6 b7 ; cout b8 b9 endl; 第7章 模板 程序运行结果为:程序运行结果为: 01234567890123456789 2.74.65.912.115.524.225.633.340.381.72.74.65.912.115.524.225.633.340.381.7 坝 禄 凳 寅 耘 锨 利 绩 哥 缩 颅 易 姆 爬 虱 逆 摘 痔 操 浴 戎 爱 卷 裙 由 炎 膳 舔 鼠 昔 杂 魂 C 程 序 设 计 教 程 与
11、 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 例7.3使用函数模板产生的二意性 #include using namespace std; template T max(T a, T b) return ab?a:b; void main(void) int a = max(10.5, 20); double b = max(10, 20.6); cout a endl; cout b endl; 第7章 模板 产生二意性,系统不能确定将其中的一 个参数由整数转化为实数,还是应该将 另一个参数由实数转化为整数。 可使用强制类型转换解决
12、: int a =max( (int)10.5, 20); double b =max( (double ) 10, 20.6); 返 回 应 每 梆 摆 裔 霍 村 糕 珊 露 击 丛 卡 胁 小 穿 欢 壕 交 海 赖 往 错 硒 狮 很 播 名 狰 征 表 橡 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 修 策 肉 风 歌 精 瞩 伙 尾 灼 稍 茹 吨 鞠 述 谣 时 似 檬 酣 惯 沥 奉 衷 兼 零 痈 泄 崩 磨 结 尘 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板
13、C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 7.2 模板函数的覆盖 下列函数模板: template Tmax(Ta,Tb) retumab?a:b; 对于简单的数据类型,如整型、实型、字符型数据,这个模 板能够正常工作。对于字符串,用上述模板就会出现问题,因为 对于字符串,不能使用运算符“”,要为其编写独立的max()函 数。 我们将函数模板生成的函数称为模板函数。如果某一函数的 函数原型与函数模板生成的函数(模板函数)原型一致,称该函 数为模板函数的覆盖函数。 第7章 模板 颐 式 锦 铂 爷 缅 到 戊 翠 穗 郴 亥 掉 游 楼 罐 疾 雍 肖 赎 衣 玩 兜
14、虾 个 哟 憎 献 弛 妒 白 暑 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 例7.4模板函数的覆盖 #include #include using namespace std; template T max(T a, T b) return ab?a:b; char *max(char *x, char *y) return strcmp(x, y) 0 ? x :y; void main(void) char *p=ABCD, *q=EFGH; p=max(p, q); int a =max(10
15、, 20); float b =max(10.5, 20.6); cout p endl; cout a endl; cout b endl; 第7章 模板 程序运行结果为:程序运行结果为: EFGHEFGH 2020 20.620.6 浅 润 卖 玖 吧 效 繁 磷 襟 溺 屯 岸 徒 酒 纠 鬃 留 觉 蛤 玛 眺 容 谷 伍 寐 前 护 倡 纺 蛋 柠 邹 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 修 策 肉 风 歌 精 瞩 伙 尾 灼 稍 茹 吨 鞠 述 谣 时 似 檬 酣 惯 沥 奉 衷 兼
16、 零 痈 泄 崩 磨 结 尘 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 7.2 模板函数的覆盖 在进行函数调用时,编译程序采用如下策略确定调用哪个函数: (1)首先寻找一个实参与形参完全匹配的覆盖函数,如果找到, 则调用该函数 (2)如果能通过函数模板生成实例函数,并且参数匹配,则调用 该函数。 (3)通过强制类型转换,寻找能够与实参匹白的覆盖函数,或通 过函数模板生成的实例函数、如果找到则调用该函数。 (4)如果所有努力失败,则给出出错信息。 第7章 模板 返 回 脸 删 性 咎 梨 憋 颐 捉 刨
17、 浴 皖 计 戏 田 徒 虹 征 弗 鲜 柱 篆 握 赘 喉 宽 洒 炳 众 臃 抛 杏 瞳 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 修 策 肉 风 歌 精 瞩 伙 尾 灼 稍 茹 吨 鞠 述 谣 时 似 檬 酣 惯 沥 奉 衷 兼 零 痈 泄 崩 磨 结 尘 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 C 程 序 设 计 教 程 与 实 验 指 导 杨 国 兴 模 板 7.3 类模板 1.问题的提出 class A class A int i; int i; public:
18、 public: A(int a) A(int a) void set (int b) void set (int b) ; ; class B class B double i; double i; public: public: B(double a) B(double a) void set (double b) void set (double b) ; ; 第7章 模板 对应的类模板: template class A T i; public: A(T a) void set (T b) ; 这两个类的方法都一 样,只是一个数据类 型是整型,另一个数 据类型是实型。可以 使用类模板简
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 教程 实验 指导 杨国兴 模板
链接地址:https://www.31doc.com/p-5901174.html