C++模板类

来源:互联网 发布:最好的安卓软件 知乎 编辑:程序博客网 时间:2024/06/16 21:14
原例子:
定义一个Stack类:
typedef unsigned long Item;

class Stack
{
private:
    enum{MAX=10};
    Item items[MAX]; // holds stack items
    int top;   //index of top stack item
public:
    Stack();
    bool isempty() const;
    bool isfull() const;
    bool push( const Item & item);//add item to stack
    bool pop(Item & item);// pop top into item
};
采用模板时,将使用模板定义替换Stack声明,使用模板成员函数替换Stack的成员函数。模板类以下面的代码开头:
template <class Type> 或者template <typename Type>
当模板被调用时,Type将被具体的类型值(如int 、string等)取代。每个成员函数头都将以相同的模板声明开头:
template<class Type>
注意:如果在类声明中定义了方法(内联函数),可以省略模板前缀和类限定符
修改后的模板类定义
template <class Type>
class Stack
{
    private:
        enum{MAX=10};
        Type items[MAX];
        int top;
    public:
        Stack();
        bool isempty();
        bool isfull();
        bool push(const Type& item);
        bool pop(Type & item);
};

template <class Type>   ------>每个成员函数开头都得有这行代码
Stack<Type>::Stack()
{
    top = 0;
}

template <class Type>
bool Stack<Type>::isempty()
{
    return top == 0;
}

template <class Type>
bool Stack<Type> ::isfull()
{
    return top == MAX;
}

template <class Type>
bool Stack<Type>::push(const Type & item)
{
    if( top < MAX )
    {
        items[top++] = item;
        return true;
    }
    else
        return false;
}

template <class Type>
bool Stack<Type>::pop(Type & item)
{
    if( top == 0 )
        return false;
    else
    {
        item = items[--top];
        return true;
    }
}

实例化:
Stack <int > kernels; //定义一个int类型的Stack
Stack <string> d;//定义了一个string类型的Stack
<>中可以是内置类型和自己定义的类。//内置类型:编程语言自己定义的一些类,在C++中包括int,char,double,bool,float等
同时,<>中可以是非类型(non-type)或表达式(expression)参数,比如:
template<class Type, int n>
class Stack
{ ……
};
0 0
原创粉丝点击