针对函数模板与类模板我想摒弃课本固有的理论知识定义,用我自己的话来见简单的叙述作用以及概念。
函数模板有什么用?
C++有很多基本的数据类型,比如 int ,double ,float…等等。我们在定义一个函数时会定义一个返回类型,表示函数返回值,但是这种返回值有一个坏处,就是只能返回单一的数据类型。如果两个参数基本类型不一致,但是想执行的函数体是一致这样我们就需要写两个函数,比如对于float 和int 基本类型来说,我们进行取绝对值的操作我们就需要写两个形参不同的函数
int abs (int x){
return (a>0)?a:-a;
}
float abs(float x)
{
return (x>0)?x:-x
}
从以上我们可以看到,单一的返回类型对于上述情况显得过于累赘,因此,函数模板的概念应运而生。它最主要的特点你就是可以先不说明返回值的类型,而把函数对对象进行的操作当成一个模板,对于任何的对象都可以执行函数的操作。
基本的声明格式
template<typename 参数名>//中间的typename 可以替换成 class
template<class 参数名>
//其中template 是一种声明格式,后面的参数名就可以当作一种函数类型
接下来我们以上面的函数模板来举一个取绝对值的例子
# include <iostream>
# include <string>
using namespace std;
template <typename t>
t abs(t x)
{
return (x>0)? x:-x
}
int main()
{
int test1=1;
double test2=2.0;
cout << abs(test1)<< "\n"
<< abs(test2) << endl;
}
运行结果如下
以上就是函数模板,当你传入不同参数类型的时候,系统可以根据参数类型绑定生成对应的函数。进而可以节省很多时间与空间。
类模板有什么用?
根据以上我们能够了解函数模板的作用,其实类模板也是如此。我们在定义一个类对象的成员的时,也只能定义一些基本的数据类型,但是们通过类模板可以先不用定义成员数据的类型。其实这一些模板操作,是让我们不管是函数也好,成员也好。直接对对象进行操作。可以免去很多不必要的麻烦。
我们直接举例子
# include <iostream>
# include <string>
using namespace std;
//类模板 其实只是声明了一种参数类型,而这种类型暂时还不确定
template <class rui,class rui1>
class test1
{
private:
rui x;
rui1 istrue;
public:
test1(rui x1, rui1 istrue1);
void getvalue();
};
template<class rui,class rui1>
test1<rui,rui1>::test1(rui x1,rui1 istrue1):x(x1),istrue(istrue1)
{
}
template<class rui,class rui1>
void test1<rui,rui1>::getvalue()
{
cout << this->istrue << "\n"
<< this->x << endl;
}
int main()
{
test1<int,bool> r111(1, true);
r111.getvalue();
}
//重载操作符
//返回类型 operator 符号(参数表)
我们在上面首先要注意以下几点
1.在声明模板类之后。我们要是在类外定义函数成员的格式为
函数类型 类模板名<参数名>::函数名(参数名)
{函数体}
2.在使用类模板的时候要声明具体的类型了。比如文中的
test1<int,bool> r111(1, true);声明了两个参数的类型。