函数模板和类模板

时间:2024-10-22 21:47:31

博客IDLanFuRen
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;