C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.

Slides:



Advertisements
Similar presentations
面向对象程序设计 QQ群: Object-Oriented Programming 汽车学院.
Advertisements

第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第14章 c++中的代码重用.
第八章 类和对象.
C++程序设计 王希 图书馆三楼办公室.
Using C++ The Weird Way Something about c++11 & OOP tricks
4.3函数 4.3.1函数的概念及定义 1、函数的概念: 可以被其它程序调用具有 特定功能的一段相对独立的 程序(模块),称函数。
函數(一) 自訂函數、遞迴函數 綠園.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
Chapter 14 Templates.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
类类型 C++支持的内置类型和操作,如 int i=10; i=i%6; i=i+4;
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第七章 操作符重载 胡昊 南京大学计算机系软件所.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
$9 泛型基础.
C#面向对象程序设计 $6 深入理解类.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C#程序设计基础 $3 成员、变量和常量.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
补课.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第三章 数据抽象.
第4章 Excel电子表格制作软件 4.4 函数(一).
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
第九节 赋值运算符和赋值表达式.
面向对象技术 练习 ffh.
第二章 类型、对象、运算符和表达式.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
#include <iostream.h>
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本课程学习目标 培养编程技能 开启智慧之门.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
C++程序语言设计 Chapter 14: Templates.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计

“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 多态的概念 运行时多态 模板 重载与静态联编 覆盖与静态联编 虚函数与动态联编 函数模板 运行时多态 C++语言程序设计

基本知识 a C++语言程序设计

10.3 模 板 模板是C++ 中的通用程序模块。 C++ 中的模板: 在这些程序模块中,有一些数据类型是不具体的,或者说是抽象的。 10.3 模 板 模板是C++ 中的通用程序模块。 在这些程序模块中,有一些数据类型是不具体的,或者说是抽象的。 当这些抽象的数据类型更换为不同的具体数据类型以后,就会产生一系列具体的程序模块。 这些抽象的数据类型称为“参数化类型”(Parameterized Types)。 C++ 中的模板: 函数模板:会产生一系列参数类型不同的函数,实例化后产生的函数,称为模板函数 类模板:会产生一系列不同参数的类,实例化后产生的类,称为模板类。 C++语言程序设计

关键字“typename”可以用“class”取代 10.3 模 板 函数模版 函数模板是函数重载概念的发展和延伸 函数模板像是一个函数发生器,使用具体的数据类型取代模板中的参数化类型,即可得到一个个具体的函数。 这种通过类型取代获得的多态,属于参数多态。 template<typename T> T max_value(T x, T y, T z) { T temp = x>y?x:y; return temp>z?temp:z; } template <typename 参数化类型名> 函数返回类型 函数名(形式参数列表) { 函数体 } 关键字“typename”可以用“class”取代 C++语言程序设计

10.3 模 板 //Main10.cpp #include<iostream> using namespace std; 10.3 模 板 //Main10.cpp #include<iostream> using namespace std; template<typename T> T max_value(T x,T y,T z){ T temp = x>y?x:y; return temp>z?temp:z; } int main() { cout<<max_value(12,32,21)<<endl; //用整数作实参调用函数模板 cout<<max_value('a','A','9')<<endl; //用字符作实参调用函数模板 return 0; C++语言程序设计

10.3 模 板 函数模版,参数化类型名可以不止一个 程序运行结果是: 34500 -31036 C++语言程序设计 10.3 模 板 函数模版,参数化类型名可以不止一个 #include<iostream> using namespace std; template<typename P1,typename P2> P1 cal(P1 x, P2 y) { //函数模板有两个参数化类型名:P1和P2 return (x * static_cast<P1>(y)); //按x的数据类型执行乘法运算 } int main() { unsigned short w=230; short z=150; cout<<cal(w,z)<<endl; //按无符号数相乘 cout<<cal(z,w)<<endl; //按有符号数相乘 程序运行结果是: 34500 -31036 C++语言程序设计

10.3 模 板 带有确定类型参数的函数模板 函数模板的参数表中,一定要包含参数化类型名,但不一定只使用参数化类型名,还可以根据需要,使用确定类型的参数。 template <class Q1> void ArrayInput(Q1 array , int num) { cout<<"输入"<<num<<"个"<<typeid(Q1).name()<<'\b'<<"型数据"<<endl; for (int j= 0; j < num; j++) cin >> array[j]; //输入数组元素 } C++语言程序设计

typeid(表达式).name() 或 typeid(类型标识符).name() 10.3 模 板 typeid运算符 在程序运行时,显示指定的数据的类型。 typeid(表达式).name() 或 typeid(类型标识符).name() 执行的结果是返回“表达式”或者“类型标识符”的类型名。 int number; float floatArray[4]; int intArray[3]; number=sizeof(floatArray)/sizeof(float); ArrayInput(floatArray, number); number=sizeof(intArray)/sizeof(int); ArrayInput(intArray, number ); 输入4个float 型数据 1.1 2.2 3.3 4.4 输入3个int 型数据 5 6 7 typeid(floatArray).name() 返回的是float * typeid(intArray).name() 返回的是int * C++语言程序设计

10.3 模 板 类模板 template <class 参数化类型名1,…, class 参数化类型名n> 10.3 模 板 类模板 template <class 参数化类型名1,…, class 参数化类型名n> class 类名 { 数据成员定义; 成员函数原型; }; template <class T1, class T2> class MyClass { private: T1 x; T2 y; public: MyClass( T1 a, T2 b ); void display( ); }; C++语言程序设计

10.3 模 板 template < class T1, class T2> 10.3 模 板 template < class T1, class T2> MyClass< T1,T2 >::MyClass( T1 a, T2 b ) { x = a; y = b; } template <class T1, class T2> void MyClass< T1, T2 >::display( ) { cout<<x<<endl; cout<<y<<endl; } int main() { MyClass<int,float> Obj1(6,6.6); Obj1.display(); MyClass<char,char *> Obj2('x',"A string"); Obj2.display(); } C++语言程序设计

在类模板实例化和声明对象时,参数i用具体的整型值来代替 10.3 模 板 带有确定类型参数的类模板 template <class T, int i> class MyStack MyStack<int,5> Obj1; 在类模板实例化和声明对象时,参数i用具体的整型值来代替 C++语言程序设计