C++模板机制

对于执行功能都相同的函数,只是参数类型和返回值类型不同,那么我们可以利用C++的模板机制只需要写一套代码。模板是实现代码重用机制的一种工具,可以大幅度提高程序设计的效率。模板分为函数模板类模板



函数模板

   

   函数模板的声明格式如下:

   template <class 类型参数>

   返回类型 函数名(模板参数表)

   {

        函数体

   }


注意:在template语句和函数模板定义语句之间不能有其它语句。


例如求最大值的模板如下:

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

template <class T>
T _max(T x,T y)
{
    return x > y ? x : y;
}

int main()
{
    int a = 1;
    int b = 2;
    double c = 2.8;
    double d = 15.4;
    cout<<_max(a,b)<<" "<<_max(c,d)<<endl;
    return 0;
}

函数模板中允许使用多个类型参数。例如:

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

template <class T1,class T2>
void Show(T1 x,T2 y)
{
    cout<<x<<" "<<y<<endl;
}

int main()
{
    Show("Lisa","Luce");
    Show(18,"Lisa");
    return 0;
}


类模板


一个类模板允许用户为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数或返回值能取任意数据类型。

   类模板的声明格式如下:

   template <class T>

   class 类名

   {

        //........

   };


在类外定义成员函数时,若此成员函数中有类型参数存在,则需要在函数体外进行模板声明,并且在函数名前的类名后缀加上<T>。例如用类模板实现栈代码如下(STL中stack的源代码也差不多是这样):

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
const int N = 10005;

template<class T>
class Stack
{
    private:
    T S[N];
    int size;

    public:
    void clear()
    {
        size = 0;
    }
    void push(T x);
    T pop();
    bool empty();
};

template<class T>
void Stack<T>::push(T x)
{
    if(size == N) return;
    S[size++] = x;
}

template<class T>
T Stack<T>::pop()
{
    if(size == 0) return NULL;
    return S[--size];
}

template<class T>
bool Stack<T>::empty()
{
    if(size == 0) return true;
    return false;
}

int main()
{
    Stack<int> s;
    s.clear();
    for(int i=1;i<=10;i++)
        s.push(i);
    while(!s.empty())
        cout<<s.pop()<<endl;
    return 0;
}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。