c++学习之模板

        c++中的模板貌似在java中没有,但是java有泛型,不知道c++有没有,后面会继续学习。模板的意思,就是说有一个原型,使用的时候只要按照原型的定义使用即可。是原型哦,可不是类型,所以模板把类型复杂的问题给解决了。这里有必要说一下函数重载,函数重载是针对同样的函数名,我们定义不同类型的形参,针对不同的形参,实现不同的函数逻辑。但是模板呢?是针对所有的类型,我们定义一个函数即可。这样的话,也就是说模板,只有一个函数定义,针对多种类型进行同样的逻辑处理。

        模板,分为两种,函数模板和类模板。早就听说了c++模板功能强大。现在证实一下。

   函数模板

        函数模板的定义使用如下格式即可:

         template <class T> T getMax(T t1,T t2)

        这样,在使用的时候,我们直接实现该函数的逻辑即可,避免了对类型的处理,如果T是对象类型肿么办,那么需要操作符重载了来实现特有逻辑了。看看下面的代码:

#include <iostream>
using namespace std;

template <class T> T getMax(T t1,T t2);
template <class T> T getMin(T t1,T t2);
template <class T,class U> T sum(T t1,U u1);


int main()
{
	int a=1,b = 2,c;
	double d1 = 1.2, d2 = 1.3;
	c = getMax(a,b);
	cout << c << endl;
	c = getMin(a,b);
	cout << c << endl;
	cout << sum(a,d1) << endl;
	return 0;
}

template<class T> T getMax(T t1,T t2)
{
	if(t1 > t2)
		return t1;
	return t2;
}

template <class T> T getMin(T t1,T t2)
{
	if(t1 > t2)
		return t2;
	return t1;
}

template <class T,class U> T sum(T t1,U u1)
{
	return t1+u1;
}

        在这里我们定义了取最大值,最小值,加法运算的函数。每一个声明或定义之前,都需要加上模板的定义才可以。另外,针对sum函数,之所以有T,U,是说sum函数可以同时传入两种不同类型的实参。返回值是T,当然,我们可以根据需要,写成U也可以啦。看看运行结果的截图吧,结果为什么会这样,我就不说了。

               

   类模板

        类模板是说,我们可以针对一个类中成员的类型进行模板化,这样的话,类中的成员是什么类型,我们也可以动态确定了。我也同样写了个例子。看看如下代码:
#include <iostream>

using namespace std;

template <class T1,class T2>
class base
{
private:
	T1 x;
	T2 y;
public:
	base();
	base(T1 a,T2 b);
	show();
}; 


template <class T1,class T2>
base<T1,T2>::base()
{
	x = 1;
	y = 2;
}

template <class T1,class T2>
base<T1,T2>::base(T1 a,T2 b)
{
	x = a;
	y = b;
}

template <class T1,class T2>
base<T1,T2>::show()
{
	cout << "x = " << x << endl;
	cout << "y = " << y << endl;
}

int main()
{
	base<int,int> *t = new base<int,int>(5,10);
	t->show();
	delete t;
	return 0;
}

        上面的代码定义了一个base类,base类中有两个私有成员变量,变量的类型是不确定的,模板化的。同样,在构造函数中,也可以使用模板化的参数。需要注意的是,我们在实现每个类的方法时,需要将每个方法前都加上模板化的声明。我们看看这个代码的执行结果吧:
        

        到了这里,模板的功能就学习完了。

        

        


发布了59 篇原创文章 · 获赞 10 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章