模板(模板函数+模板类)

1.模板

1.1 模板出现的原因

  1. 为了代码重用;
  2. 使重用的代码不受数据类型的限制

把数据类型设计为一个参数,即参数化(parameterize) 程序设计。
软件模块由模板(template) 构造。包括函数模板(function template)和类模板(class template)。

1.2 函数模板

函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计。

模板函数的定义

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

注意

  1. 模板参数表可以有多个,用逗号分开,但是不能为空
  2. 模板类型参数(template type parameter)代表一种类型,由关键字 class 或 typename)后加一个标识符构成,在这里两个关键字的意义相同,它们表示后面的参数名代表一个潜在的内置或用户定义的类型。

模板函数的使用方法

#include <iostream>
#include <algorithm>
#include <vector>
#include <typeinfo>

using namespace std;


template<typename Type>

void Print(vector<Type>& vec)
{
   cout<<typeid(Type).name()<<"---->";
   for(int i = 0;i < vec.size();i++)
   {
      cout<<vec[i]<<" ";
   }
   cout<<endl;
}

int main(void)
{

   vector<int> vet{1,2,3,4,5};
   vector<char> vec{'a','b','c','d','e'};
   vector<float> vef{1.1,2.1,3.1,4.1,5.1};

   Print(vet);
   Print(vec);
   Print(vef);
   
   return 0;
}

在这里插入图片描述

总结

函数模板根据一组实际类型构造出独立函数的过程通常是隐式发生的,称为模板实参推演(template
argument deduction)。
为了判断模板实参的实际类型,编译器需检查函数调用中提供的函数实参的类型。ia 的类型为 int 数组,dx的类型为 double 数组。都被用来决定每个实例的模板参数。该过程称为模板实参推演在编译 main0函数中,由编译函数模板(functron template) 而生成的函数,称为模板函数(templatefunction)。这两个概念须分清楚

1.2 类模板

类模板定义如下:

模板定义如下
template<类型模板或参数表> 
class 类名{
...... //类声明体
}; 
template<模板参数表>
返回类型 类名<类型模板或参数表>::成员函数名 1(形参表){
//成员函数定义体
}
template<模板参数表>
返回类型 类名<类型模板或参数表>:成员函数名 n(形参表)......; //成员函数n 
{
	定义体n
}

模板参数有两种:模板类型参数和模板非类型参数
从通用的类模板定义中生成类的过程称为模板实例化 (template nstantiation)
其格式为:类名<类模板实在参数表>对象名

使用举例

#include <iostream>
#include <algorithm>
#include <vector>
#include <typeinfo>

using namespace std;

template<typename Type>

class SqStack
{
private:
   Type* data;
   int capacity;
   int pos;
public:
   SqStack(int sz = 10){
      data = new Type[sz];
      capacity = sz;
      pos = -1;
      cout<<typeid(Type).name()<<endl;
   }
   ~SqStack(){
      delete []data;
   }
};

int main(void)
{

   SqStack<int> ist;
   SqStack<double> dst;
   
   return 0;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值