作用:
模板技术可以使类型参数化,编写类型时可以忽略掉类型。
目的:
为了区分普通函数和模板函数的区别,模板函数引用关键字template。
内容:
当我们写函数模板时,先要在你写的函数上面写template<class t>这条语句。(另一种写法为template<typename t> 注意此时的t只是一个变量,并且一个template 只对应下面的第一个函数)
举例:
下面我们来写一个两数交换的程序
template<class t>
void myswap(t &a,t &b){
t temp=a;
a=b;
b=temp;
}
这就是两数交换的一个函数模板。
两种类型:
在我们去调用函数模板时,会出现两种类型,一种是自动类型推导,另一种是显示的指定类型。
自动类型推导
自动类型推导就是和我们调用普通函数时的写法是一样的,它的类型取决于所传进去参数的类型。
比如以上面的例子为例,调用时
void test() {
//1.自动类型推导
int a = 10, b = 2;
cout << "a:" << a << "b:" << b << endl;
myswap(a, b);
cout << "a:" << a << "b:" << b << endl;
}
这就是自动类型推导。
显示的指定类型:
显示的指定类型就是在调用函数模板时我们要将它所表示的类型写出来让大家知道。它的写法!!!是在()的前面加上<类型>。
void test(){
//2.显示的指定类型
int da = 20, db = 6;
cout << "da:" << da << "db:" << db << endl;
myswap<int>(da,db);
cout << "da:" << da << "db:" << db << endl;
}
这就是显示的指定类型。
模板函数与普通函数有什么区别?
1.模板函数不允许自动类型转换
2.普通函数可以自动进行类型转换
模板函数和普通函数在一起调用的规则:
1.模板函数和普通函数一样都可以被重载
2.c++编译器优先考虑普通函数
3.如果模板函数可以产生一个更好的匹配,那么调用模板函数
4.可通过空模板实参列表的语法限定编译器只能通过模板函数。比如:myswap<>(a,b);
这期内容到这就结束了,下期给大家带来类模板!!!!