博客ID:LanFuRen
C系列专栏:C语言重点部分 C语言注意点 C++基础 Linux 数据结构 C++注意点
声明等级:黑色->蓝色->红色欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦
目录
1)函数模板
2)函数模板的选择问题(花钱法则)
3)类模板
C++区别于C语言的关键在于这一革新的新语法——模板
模板的出现,相当于一个人一开始给别人敲代码,最后让别人敲代码,外包出去,自己省力了。
1)函数模板
我们直接根据Swap函数模板的代码来分析一下函数模板到底是什么,到底方便在哪
#include<iostream>
using namespace std;
//函数指针
template<typename T>
void Swap(T& left, T& right)
{
T tmp = left;
left = right;
right = tmp;
}
//原理
//虽然是模板,但函数调用的不是同一个函数
//“是模板印刷出来的”函数——推演
//不知道如何推演的情况——显式实例化
int main()
{
int a= 1, b = 2;
Swap(a, b);
cout << a << "-" << b;
return 0;
}
template<class T>意思是声明接下来是模板,T就是模板,会根据主函数的传参进行推演(活字印刷) 。
然后我们看主函数里的实参是a,b。类型是int,这样T就会转换成int。这种编译器自行推演的情况就是隐式实例化;如果不想让编译器自行推演的话,我们可以使用显式实例化:Swap<int>(a,b);这样就会以整型方式运行。
2)函数模板的选择问题(花钱法则)
举个例子,如果你现在缺钱,而且朋友正好找你看话剧,有60-880的票价,你肯定会选择60的,如果不缺钱的话,最高可以买880的票价,直面话剧演员,观感拉满。函数模板也是这样,会选择与参数更相符的模板来运行。
3)类模板
类模板可以推演成员变量的类型,直接上代码,很容易理解:
template<class T>
class Date
{
public:
Date(int year, int month, int day)
:_year(year)
,_month(month)
,_day(day)
{}
private:
T _year;
T _month;
T _day;
};
如果实例化对象的话,显式实例化:Date<int> d1;