在C++的学习中。我深刻体会到,类,模板是C++实现面向对象的主要内容,不仅增加了代码的可阅读性,更能清晰的表达算法,比C的流水式设计要更具有结构性。今天对于template有一个初步的认识,总结如下:
template的引入:对于函数的重载(overload)常常会遇到这样的问题:对于一个两数相加的函数add(a,b),对于a,b可以是(int,int),也可以是(char,char)或者是(int,int,int),(char,char,char),(int,int,char)(重载:对于函数的形参的类型,个数,或二者一起的改变,而用相同的函数名),但若单单只用重载。则需要写更多的函数代码。其实表达的是同一种算法,这样程序的时间和空间性能都被拖延,运用模板则可以解决这一问题。
template的分类:分为函数模板和类模板
1 函数模板的声明与定义:
template<class或typename T> 此处的class与定义类的class有区别
T 函数名
{
定义
}
示例代码:
template <class T>
T add(Ta,T b)
{
return (a+b);
}
2 类模板的声明与定义:
template <class或typename T>
class myclass
{
......
}
示例代码:
#ifndef ClassTemplate_HH#define ClassTemplate_HH
template<typename T1,typename T2> //定义类时进行模板的声明
class myClass{
private:
T1 I;
T2 J;
public:
add(T1 I,T2 J) //
void show();
};
//这是构造函数
//注意这些格式
template <typename T1,typename T2> //进行参数定义时的模板声明
myClass<T1,T2>::add(T1 a,T2 b):I(a),J(b){}/在这里将形参所获得的值传给私有变量I J,在show()函数中使用;
//这是void show();
template <typename T1,typename T2> //函数定义时的模板声明
void myClass<T1,T2>::show()
{
cout<<"I+J="<<I+J<<endl;
}
由类模板的定义可以看出:不管是定义什么,只要需要将类型参数化,都要进行模板的声明。
3 无类型的模板声明
对于不是类型的东西,模板也可以对其进行模板化,如这样的定义:
template<class T, int a>
func1(T m,30)
func2(T m,40)
.
.
.
此处的a可以是任意int型的数。
总结:无论是对于函数,类还是已声明类型的变量,template的最大特点就是可以将类型或者别的东西变量化,使得重载更加简便。(初始认知)
这只是初窥template,做程序体会下~!