c++第十六章-(函数模板与类模板)

函数模板的作用:解决需要重载多种不同类型参数的函数的问题,但又不想重载的时候。

好处,泛型编程,解决了多处重载的问题。

函数模板Demo:

//声明函数模板类型T,T代表泛型,类似于OC中的id。函数模板的声明要实现放在一齐,分开的话会报错。class换成typename也是同一个意思。
template <class T>
void swap(T &a,T&b)
{
    T temp = a;
    a = b;
    b = temp;
}


int main(int argc, const char * argv[])
{
    int i1 = 100;
    int i2 = 200;
    std::cout << "交换前,i1 = " << i1
    << "   i2 = "<< i2 <<  std::endl;
    swap<int>(i1,i2);//调用方式一
    std::cout << "交换前,i1 = " << i1
    << "   i2 = "<< i2 << std::endl;
    
    
    
    std::string s1 = "小甲鱼";
    std::string s2 = "小鱿鱼";
    std::cout << "交换前,s1 = " << s1 << ",i2 = " << s2 << std::endl;
    swap(s1, s2);//调用方式二
    std::cout << "交换前,s1 = " << s1 << ",i2 = " << s2 << std::endl;
    return 0;
}

控制台打印结果:

交换前,i1 = 100   i2 = 200
交换前,i1 = 200   i2 = 100
交换前,s1 = 小甲鱼,i2 = 小鱿鱼
交换前,s1 = 小鱿鱼,i2 = 小甲鱼

类模板Demo,实现栈式结构,first in last out,只有1个口。

template <class T>
class Stack
{
    
public:
    Stack(unsigned int size = 100);
    ~Stack();
    void push(T value);
    T pop();
    
private:
    unsigned int size;//数组容器data的大小
    unsigned int sp;//栈的当前位置
    T *data;//存储入栈的数组
};


template <class T>
Stack<T>::Stack(unsigned int size)
{
    this -> size = size;
    data = new T[size];//初始化一个泛型数组
    sp = 0;
}

template<class T>
Stack<T>::~Stack<T>()
{
    delete []data;
}

template<class T>
void Stack<T>::push(T value)
{
    data[sp++] = value;
}

template<class T>
T Stack<T>::pop()
{
    return data[--sp];
}

int main()
{
    Stack<int> intStack(100);
    
    intStack.push(1);
    intStack.push(2);
    intStack.push(3);
    
    std::cout << intStack.pop() << "\n";
    std::cout << intStack.pop() << "\n";
    std::cout << intStack.pop() << "\n";
}

控制台输出结果:

3
2
1
posted @ 2014-07-16 17:25  forrHuen  阅读(211)  评论(0编辑  收藏  举报