C++基础7:模板编程/泛型编程

1、基本概念

1.1 什么是模板?

模板(Template)是允许函数或者类通过泛型(generic types)的形式表现或运行的特性

1.2 模板有什么用?

模板可以使函数或者类只写一份代码而对应不同的类型

1.3 模板编程/泛型编程

一种独立于特定类型的编码方式

1.4 模板分类

模板分为函数模板与类模板两类
(1)函数模板(Function template):使用泛型参数的函数(function with generic parameters)
(2)类模板(Class template):使用泛型参数的类(class with generic parameters)

2、函数模板

2.1 模板声明

template <模板形参表> 函数返回类型 函数(形参表);

2.2 模板定义

template <模板形参表>
函数返回类型 函数(形参表){
   
      函数体;
};

2.3 例子及模板实例化

例子:

template <typename T> T Max(T a,T b){
   
        return a>b?a:b;
}

模板实例化:

函数(实参表)

产生模板特定类型的函数或者类的过程称为实例化
调用函数模板与调用函数完全一致
实例:
最值函数Max(),Min()
字符串转数值Ston()

3、类模板

3.1 模板声明

template <模板形参表> class 类名;

3.2 模板定义

template <模板形参表>
class 类名 {
   
}

3.3 模板实例化

类名<模板实参表> 对象;

3.4 模板参数等

1、模板参数表
多个模板参数之间,分割。模板参数,模板参数,…
2、模板参数
3、类型形参
class 类型形参或者typename 类型形参
类模板的声明与实现通常都写在头文件中,是不能够分开的。

3.5 实例

复数类Complex
三角形类Triangle

4、模板参数推导/推演(deduction)

模板参数推导/推演(deduction):由模板实参类型确定模板形参的过程。

实例化有两类:
显示实例化:代码中明确指定类型的实例化
隐式初始化:根据参数类型自动匹配的实例化
类模板参数允许自动类型转换(隐式转换);函数模板参数不允许自动类型转换(隐式转换)
在模板参数列表中,class和typename完全一样。但是在语义上,class表示类,typename代表所有类型(类以及基本类型)。
请尽量使用typename

模板实例化时:

Max(2,2.4)

参数推导会出现模板实参类型int与double不一致的错误。
解决方法:

1、每个模板参数独立类型

template <typename T , typename U> inline const T& Max(const T& a, const U& b)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值