C++模板(一)

来源:互联网 发布:java 图片base64 上传 编辑:程序博客网 时间:2024/06/05 20:18

模板的目的:为了实现代码的复用性。
我们可以理解“模板”其实就是一栋建造好但还未装修的楼,装修就是我们需要的类型(int, char, string, float, 自定义类型等),当楼房装修好就可以使用了,装修的过程就是我们说的实例化,这样理解模板会不会感觉好一点了。

- 模板函数

格式: template <class 形参名1, class 形参名2...>       函数返回类型  函数名(参数列表)       {...}      (注:class 可以换成 typename)eg: template <class T>    T Add(const T& a , const T& b)    {       return a + b;    }(为何不用引用返回?因为这里产生的是一个临时变量a+b的值(生存期是Add函数范围内),临时变量不能使用引用)(注:模板函数在没有实例化之前,编译器一般不会检查其的语法错误)

- 模板类

调用:类名<类型> 对象名类的类型:类名<类型>eg:template <class T>   class A   {...}   mian()函数调用--- A<int> b;
  • 适配器模式:一种模板的设计模式,主要针对下面两种情况来设计的:
    队列—–先进先出 (链表)—–尾插头删 (队头出,队尾进)
    栈——-后进先出 (顺序表)—-尾插尾删 (栈顶进出)

这里写图片描述

适配器的实现模式:template <class T , class Container>T:表示一种数据类型;Container:容器,是一种类,将该类设计成(看成)一种容器;

队列:

template<class T,class Container = List<T>>//Container是一个容器,是一个链表类class Queue{protected:    Container _con;//_con是一个自定义的链表对象public:    void Push(const T& data)//尾插    {        _con.PushBack(data);    }    void Pop()//头删    {        _con.PopFront();    }    void Show()    {        _con.show();    }    T& Back()//返回尾值    {        return _con.back();    }    T& Front()//返回头值    {        return _con.front();    }    size_t Size()    {        return _con.size();    }    bool Empty()    {        return _con.isEmpty();    }};----main()调用int main(){    Queue<int,List<int>> dui;    dui.Push(1);    dui.Show();    dui.Push(2);    dui.Show();    dui.Push(3);    dui.Show();    dui.Push(4);    dui.Show();    while(!dui.Empty())    {        cout<<"出队列:"<<dui.Front()<<endl;        dui.Pop();        dui.Show();    }}

栈:

template<class T,class Container = Sqlist<int>>//容器是一个顺序表class Stack{protected:    Container _con;//_con是一个自定义的顺序表对象public:    void Push(const T& data)//尾插    {        _con.PushBack(data);    }    void Pop()//尾删    {        _con.PopBack();    }    bool Empty()    {        return _con.isEmpty();    }    size_t Size()    {        return _con.size();    }    T& Top()//返回栈顶的值    {        return _con.Back();    }    void show()    {        _con.show();    }};-----main调用int main(){    Stack<int,Sqlist<int>> sq;    sq.Push(4);    sq.show();    sq.Push(5);    sq.show();    sq.Push(6);    sq.show();    sq.Push(7);    sq.show();    while(!sq.Empty())//判空    {        cout<<"出栈:"<<sq.Top()<<endl;        sq.Pop();        sq.show();    }}

(注:以上并没有将代码全部展出,只是通过展现部分代码以重点体现其主要的功能,具体代码可以查看我的其他博客,也可以自己实现相应的模板链表和模板顺序表)

0 0