C++ 模板类、结构体模板与模板函数

1.模板的用处

模板可以减轻我们的负担,可以实现用统一的代码实现不同数据类型的功能。

2.模板类、模板函数、模板结构体的样式

template<class 数据类型参数标识符>
<返回类型><函数名>(参数表)
{
    函数体
}

//结构体模板---使用体现:声明结构元素时 StackNode<类型> s;
template<class T>
struct StackNode
{
  struct T data;
  struct StackNode<T> *next;
};

//类模板---使用体现:声明类对象时 Stack<类型> s;
template<class T>
class Stack
{
 public:
  T pop();
  bool push(T e);
 private:
  StackNode<T> *p;
}
template<class T>//类模板外的 成员函数实现
T Stack<T>::pop()
{...}

其中,template是定义模板函数的关键字;template后面的尖括号不能省略;class(或typename)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符。这样,在以后定义的这个函数中,凡希望根据实参数据类型来确定数据类型的变量,都可以用数据类型参数标识符来说明,从而使这个变量可以适应不同的数据类型。

3.使用模板类时要注意的问题

1.函数模板允许使用多个类型参数,但在template定义部分的每个形参前必须有关键字typename或class,即:

template<class 数据类型参数标识符1,…,class 数据类型参数标识符n>
<返回类型><函数名>(参数表)
{
     函数体
}

2.在template语句与函数模板定义语句<返回类型>之间不允许有别的语句。如下面的声明是错误的:

template<class T>
int I;
T min(T x,T y)
{
   函数体
}

一般写法

 1 template <class T>//结构体模板
 2 struct node
 3 {    
 4          T data;    
 5          struct node<T> *lchild;    
 6          struct node<T> *rchild;
 7 };
 8 template <class T>//类内类模板
 9 class bin
10 {
11 private:    
12          node <T> h;
13 public:    
14          void pri();
15 };
16 template <class T>//类外成员函数实现模板
17 void bin<T>::pri()
18 {    
19          node<T> *p = new node;    
20          cout<<"qunimade"<<endl;
21 }
22 int _tmain(int argc, _TCHAR* argv[])
23 {
24    bin<int> abc;
25 }
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值