为什么有函数魔板和函数模板语法
引出:交换a和b(int ,float)
函数模板语法:
template <typename T>或者class <typename T>
含义:声明了一个函数模板,通知编译器当前T是自定义类型,请求编译通过。
函数模板的调用:
1、显示类型 调用 函数名<类型>
2、自动类型 推导
//交换a和b int
int my_swap(int &a,int &b){
int temp=0;
temp=a;
a=b;
b=temp;
return 0;
}
//交换a和b float
int my_swap(float &a,float &b){
float temp=0;
temp=a;
a=b;
b=temp;
return 0;
}
//模板函数
template <typename T,typename T1>
int my_swap(T &a,T1 &b){
T temp=0;
temp=a;
a=b;
b=temp;
return 0;
}
//注意:T和T1的作用域,紧挨着模板声明的函数结束为止。
//调用方式:
my_swap<int,int>(a,b);
my_swap(a,b);//不推荐
函数模板做函数参数
数组排序
本质:类型参数化
函数模板和普通的函数区别
调用函数模板将严格的按照类型匹配,不会进行隐式类 型转换。
template <typename T>
int my_swap(T &a,T &b){
T temp=0;
temp=a;
a=b;
b=temp;
return 0;
//调用
int a=20;
char b=30;
my_swap(a,b);//报错,隐式调用模板函数时,不会发生自动类型转换。
}
类模板
集合数据结构考虑:可实现算法和数据的分离。
单个类模板:
类模板的使用,做函数参数
A<int > a, A<int> &a;
继承的类模板(模板类派生普通类)
class B:public A<int>
模板类派生模板类
template <typename T>
class B:public A<T>
练习:
复数模板类
数组模板类
参见课上Code部分。
作业:
1、补充完成Teacher类 char * name;
2、什么时候返回对象,和引用?