26.C++- 泛型编程之类模板(详解)

在上章25.C++- 泛型编程之函数模板(详解) 学习了后,本章继续来学习类模板

 

类模板介绍

和函数模板一样,将泛型思想应用于类.

编译器对类模板处理方式和函数模板相同,都是进行2次编译

类模板通常应用于数据结构方面,使得类的实现不在关注数据元素的具体类型,而只关注需要实现的功能

比如: 数组类,链表类,Queue类,Stack类等

 

<span "="" src="https://images2018.cnblogs.com/blog/1182576/201804/1182576-20180410171149793-933054546.png" width="265" height="157">

 

类模板的使用

  • 定义对象时,必须指定类模板类型,因为编译器无法推导类型
  • 使用具体类型<Type>来定义对象

如下图所示:

 

 

初探类模板

写一个类模板,实现不同类型的加减乘除

运行打印:

 

类模板的工程应用

  • 类模板必须在.h头文件中定义
  • 类模板的成员函数不能分开在不同的文件中实现
  • 类模板外部定义的成员函数,和模板函数一样,还需要加上模板template <typename T>声明,以及结构体<T>声明

接下来,我们便修改上面代码定义的Operator类模板,只需要写Operator.h文件即可:

 

多参数类模板

类模板可以定义任意多个不同的类型参数,同时还要必须指定每个模板参数

例如:

运行打印:

从结果来看,上面的类模板好像已经实现了add加法运算.但是却不能支持指针类型.

其实,类模板也可以像函数重载一样, 类模板通过特化的方式可以实现特殊情况.

 

比如:

  • 部分特化表示通过特定规则约束类型参数,模板声明和类似,并在类名右侧指定参数,比如:
  • 编译时,会根据对象定义的类模板类型,首先去匹配完全特化,再来匹配部分特化,最后匹配正常的类模板.

 

初探类模板特化

运行打印:

 

<span "="" src="https://images2018.cnblogs.com/blog/1182576/201804/1182576-20180410171230370-1961516438.png" width="333" height="259">

 

 

  • 数值型模板参数必须在编译时被唯一确定

比如: 变量在运行期间是可变的,所以不能作为模板参数.以及浮点数(不精确),类对象(可变)等等.

 

接下来,我们便通过数值参数的类模板来求 1+2+3+...+N的值

代码如下所示:

运行打印:

 

 


文章来源:https://www.cnblogs.com/lifexy/p/8781525.html

转载于:https://www.cnblogs.com/xiongjim/p/9674160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值