类模板

类模板

1、目的:

定义可以存放任意类型对象的通用容器类。

如一个可以存放任何数据类型的链表,一个可以存放int, double, string等甚至未知类型的栈(stack)。

2、实现方式:

为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型。

3、格式:

template < 模板形参表 >
class 类模板名
{ 类成员声明 };

其中,模板形参表形式如下:
typename 模板形参1, typename 模板形参2, …

在类模板以外定义其成员函数,则函数首部形式如下:

template <模板形参表>
返回值类型 类模板名 <模板形参名列表>::函数名( 函数形参表 )

4、类模板的实例化:

类模板是一个通用类模型,而不是具体类,不能用于创建对象,只有经过实例化后才得到具体类,才能用于创建对象。
• 实例化的一般形式:

类模板名 < 模板实参表 >

• 模板实参是一个实际类型。
• 一个类模板可以实例化为多个不同的具体类。

Stack<int> stack_int;
Stack<double> stack_double;
Stack<string> stack_string;

5、一个例子:

//genericStack.h:
template <typename ElementType>
class Stack {
 public:
    Stack();
    ~Stack();
    void push(ElementType obj) throw(std::bad_alloc);
    void pop() throw(std::logic_error);
    ElementType getTop() const throw(std::logic_error);
    bool isEmpty() const;
 private:
    struct Node {
    ElementType element;
    Node* next;
    };
    Node* top;
};
//genericStack.cpp:
#include “genericStack.h”
template <typename ElementType>
void Stack<ElementType>::push( ElementType obj )
{
    Node* temp;
    temp = new Node;
    temp -> element = obj;
    temp -> next = top;
    top = temp;
}

template <typename ElementType>
void Stack<ElementType>::pop()
{
    Node* temp;
    if (top != NULL) {
        temp = top;
        top = top -> next;
        delete temp;
    }
    else {
        return;
    }
}
#include “genericStack.h”

int main()
{
    Stack<int> stack; // 实例化一个保存int型元素的栈
    for (int i = 1; i < 9; i++) // 向栈中压入8个元素
    stack.push(i);
    while (!stack.isEmpty()) { // 栈不为空时循环
        cout << stack.getTop() << " "; // 显示栈顶元素
        stack.pop(); // 弹出栈顶元素
    }
}

声明:以上整理自个人理解和中山大学万海讲师上课内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值