类模板

36 篇文章 1 订阅

模板是一种泛型编程思想,提供参数化类型,即能够将类型名作为参数传递给接收方来建立类或函数(形式、功能相似,类型不同),也是一种实现代码重用的重要方式。


类模板定义

类模板在class上一行使用template加尖括号声明:

template<typename 类型参数1, typename 类型参数2...>
class 类名
{...};

当模板被调用时,参数类型将被具体的类型值(如int、string…)取代。
在模板定义中,可以使用泛型名来作为参数类型。同样,可以使用模板成员函数作为类方法,但是要注意在类外的函数定义时,函数头要以相同的模板声明打头,且类限定符必须指明类型参数名列表

template<typename T>
class A
{
...
public:
	bool b(T c);	//模板成员函数
	...
};
...
template<typename T>	//函数头要以模板声明打头
bool A<T>::b(T c)	//指明类型参数名列表A<T>::
{
...
}

使用模板类

  • 类模板和模板类
  1. 类模板是一个模板:一个类模板允许用户为类定义一种模式,使得类中的某些数据成员、成员函数的参数、返回值能够取任意类型,它的存在不是代表一个具体的、实际的类,而是一类类。
  2. 模板类是一个类:模板类是类模板实例化后的一个产物,类模板中不确定的数据类型已经在模板类中确定。
A<int> a1;
A<double> a2;

上面的代码创建两个类a1、a2,编译器按A<T>模板来生成两个独立的类声明和两组独立的类方法。
注意:与常规的函数模板是不同,模板类必须显式地提供所需的类型。

template<typename T>
class A
{
...
public:
	A & operator=(const A & a);	//重载运算符返回A类型引用,参数为A类型引用
	...
};
...
template<typename T>	
A<T> & A<T>::operator=(const A<T> &a)	//在类中可以使用缩写,但在类外必须使用全称。
{
...
}

原型将赋值运算符的返回类型声明为A类引用,而实际的模板函数定义将类型定义为A<T>。前者是后者的缩写,但只能在类中使用。即可在模板声明或模板函数定义内使用A,但在类外面,即指定返回类型或使用作用域解析运算符时,必须使用完整的A<T>。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值