前言

很久没有总结面向对象的笔记了,每节课听了张老师的课都能感到受益匪浅,老师把C++面向对象的思想讲的十分透彻,而且很多编程细节都是企业化,项目化的思想。希望我的记录能学到老师一半的思想,也让人心满意足了!

模板(template)

template是一个关键字,就是告诉你,下面的函数或者类都是编译的模板。

template 有两个参数类型分别是classtempname,至于它们之间有什么区别,后文会提到,先举一个例子来简单引入模板

在编程的时候,我们经常会遇到交换两个数的情况,通常情况下我们会定义一个函数来完成这个交换

1
2
3
4
5
void MySwap(int&a,int&b){
int temp=a;
a=b;
b=temp;
}

上面的函数只能交换两个int型变量,那么如果遇到两个float型变量呢,是不是还要再写一个新的交换函数,只是参数类型是float*,如果再遇到double型呢。很显然,对于一个相同的操作,对于不同的类型,要使用多个函数,那我们能不能自定义一个函数,让C++自己识别我需要交换的数的类型,从而根据不同的类型自己选择应有的参数类型。于是,我们引入的模板

1
2
3
4
template<typename T>//模板声明,只生效一次, typename 模板函数
void MySwap(T&a,T&b) {
T t = a; a = b; b = t;
}

和上面的函数相比,模板函数就是把参数类型声明为 typename T,

甚至,我们还可以强行把两个不同类型的参数进行交换

1
2
3
4
template<typename T1,typename T2>
void MySwap(T1& a, T2& b) {
T1 t = a; a = b; b = t;
}

typename

参考

c++类模板template中的typename使用方法-超级棒 - 唯一诺 - 博客园 (cnblogs.com)

(57条消息) C++ sort函数第三个参数的理解_林夕水心的博客-CSDN博客