浅谈C++类模板

我们知道在C++中模板可以分为类模板与函数模板,在以前的文章中介绍了函数模板。本文本文以栈类Stack与链表类Clink为例介绍一下类模板。
首先模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。目的就是减少代码的重复量,解放C++程序员的生产力。
类模板的定义

template<class T>
class Stack
{ 
public:
           Stack();
           ~Stack();
           void Pop();
           void Push();
           T  Gettop();
private:
          T *mdata;
          int top;
}

构造函数和析构函数的函数名称建议省略模板参数,其他不建议省略
这里特别注意:这个类的类型是Stack< T >,其中T是模板参数。因此,当在声明中需要使用该类的类型时,你必须使用Stack< T >。然而,当使用类名而不是类的类型时,就应该只用Stack;譬如,当你指定类的名称、类的构造函数、析构函数时,就应该使用Stack。
成员方法的实现
类模板的成员方法在类外实现时,为了定义类模板的成员函数,必须指定该成员函数是一个函数模板,而且你需要使用typename 声明后面类型属于模板。在类中实现时,相当于内联函数。类模板成员函数本身也是一个模板,类模板被实例化时它并不自动被实例化,只有当它被调用或取地址,才被实例化。

template <typename T>
void Stack<T>::Push(T val)
{
	if(!Full())
		{
			mdata[++top]=val;
		}
}

友元关系
友元类需要一对多
友元模板一对一
类模板的实例化
类模板是选择性实例化
类模板什么时候会被实例化呢?

  1. 当使用了类模板实例的名字,并且上下文环境要求存在类的定义时。
  2. 对象类型是一个类模板实例,当对象被定义时。此点被称作类的实例化点。
  3. 一个指针或引用指向一个类模板实例,当检查这个指针或引用所指的对象时。
    类模板的特例化
    类模板的特例化分为完全特例化和部分特例化,特例化主要是是针对类型
    成员中只要少部分成员不满足特殊类型的需求,针对部分函数进行特例化。
    成员中大部分成员不满足特殊类型的需求,针对类模板实现类模板的全特化。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值