c++类模版

来源:互联网 发布:网络课程建设方案 编辑:程序博客网 时间:2024/06/06 05:38

模板顾名思义就是对一类事物的总结,找到共同点,取而代之,省去了很多重复。

1,模板函数

如果说想要比较两个整数的大小,那么你需要写一个这样的方法

int Max(int a, int b){return (a > b)?a:b;}
如果你想要比较两个浮点数的大小,那么上面的函数便不能再用了,需要另写

double Max(double a, double b){return (a > b)?a:b;}


如果再想比个别的类型,又需要重新写,仔细看一下这两个函数,除了参数类型,返回值类型之外都一样一样的,那么有没有个方法,可以代替类型呢,于是就有了模板。

template <class T>T Max(T a, T b){return (a > b)?a:b;}


看到这个是不是简单了很多,无论什么类型基本都可以用,至少不会纠结于int还是double了。

当然,写模板的需要注意的是这一行,template <class T>;尤为重要,表示声明一个模板。然后下面就可以用了。而且这句话貌似只对紧挨着的代码有效。如果想要写两个模板函数,那么就需要声明两次模板了。


2.类模版

其实和函数模板有点像,但还是不一样的。

先看一个例子吧

template <class T>class Compare{public:Compare(T a, T b){m_x = a;m_y = b;}Compare(){}T Max(T a, T b){return (a > b)?a:b;}T Min(T a, T b){return (a < b)?a:b;}public:int m_x;int m_y;};


这就是一个类模版,那么如何用呢

既然是类,必须要先声明一个对象吧。

Compare<int> obj(2, 4);
是不是感觉怪怪的,但是和STL又有点像。对的,STL的源代码就是用模板写的。

类名后面尖括号里面的是在表名类的类型,使用模板当然要表名你是什么类型了,要不然它怎么认得。但是使用,模板函数不是这样的,在调用的时候,直接填写参数即可,其实参数就是在表名自己的类型而已。

下面的使用一切正常,想用类里面哪个函数用就可以了。


上面的例子是类函数的实现是写在类里面的,如果写在类外面该怎么办呢?

template <class T>T Compare<T>::Min(T a, T b){return (a < b)?a:b;}
还需要再声明一次类模板,然后就没什么区别了。


3.如果需要多个类型,可以这样声明类模版

template <class T1, class T2>






0 0
原创粉丝点击