C++学习第七天——泛型编程 函数模板、类模板

泛型挺常见的…
泛型编程:编程范式,通过将数据类型参数化来实现同一段代码上操作不同的数据类型,其效率与针对某特定数据类型设计的算法相同
最初诞生于C++,其语言支持机制是模板在这里插入图片描述
1.一个模板就是创建一个类或函数的通用模型
2.模板使程序所处理的对象的数据类型参数化
3.模板将一般算法数据类型分开,使一段程序处理多种不同类型的对象

函数模板

不说明某些参数的数据类型的函数

1.声明:

template<typename Ttype1,typename Ttype2>
//<>中的参数为!!模板形参!!,形式为typename Ttype。
//Ttype为标识符,代表所声明的模板中参数化的数据类型名
返回类型 函数名(参数列表)
{函数体;}

2.看这个声明中的一些词语可能不太清楚,看下这个例子

int &abs(int &a)
{return a<0?-a:a;}

double &abs(double &a)
{return a<0?-a:a;}

float &abs(float &a)
{return a<0?-a:a;}

发现可以使用一个Ttype代表所声明的模板中要参数化的数据类型
template <typename T>
T &abs(T &a)
{return a<0?;-a:a;}

3.说明:
①可以看出将一般算法(函数体)数据类型(例子中的double int float代替成了T)分开了,脱离了
函数模板
被调用时,编译器根据实际测参数确定模板参数T的类型,自动生成一个对应的函数,即模板函数
③函数模板的执行过程中两次编译:
实例化前,编译器检查模板代码本身语法是否正确。
实例化时,检查模板代码,查看调用是否合法。

类模板

声明一个类时将实现这个类所需要的数据成员的类型、成员函数的参数类型或返回值的类型参数化

1.声明:

template<typename Ttype1,typename Ttype2>
class ClassName
{类定义体};
//<>中的参数为!!模板形参表!!,形式为typename Ttype。
注意:模板类的成员函数也必须时函数模板

2.类模板外定义类的成员函数的形式:

template<typename Ttype1,typename Ttype2>
返回类型 ClassName<Ttype1>::函数名(参数列表)
{函数体;}

3.创建实例:

ClassName <Ttype> 对象1,对象2,...对象n

4.看前三个描述还有点不清楚,看下这个例子

#include <iostream>
using namespace std;
struct stuScore
{int id,score;}
template<typename T>
class CBuffer
{private:
    T a;
    int empty;
 public:
     CBuffer();
     T get();
     void push(T x);
};     
//CBuffer初始化 构造函数
template<typename T>
CBuffer <T>::CBuffer():empty(0){}
//get函数
template<typename T>
T CBuffer <T>::get()
{ if(empty==0)
    cout<<"the buffer is empty"<<endl;
  return a;}
//push函数
template<typename T>
void CBuffer <T>::push(T X)
{empty++;a=x;}

void main()
{stuScore stu={50,2001};
 CBuffer <int> i1,i2;
 CBuffer <double> d;
 CBuffer <stuScore> stu1;
 ....
    ....
      ....调用函数之类的
}

5.说明:
①数据类型参数化使得所声明的类成为一个可以处理多种数据类型的通用类
②创建类对象的实例时执行过程:
指定参数所代表的实际数据类型,将通用类实例化,所建立的实例类是通用类的一个副本。
在编译时进行。

动态联编的内容看了一些书以及PPT 就没总结
模板知识还没学习完成 自己还有一些困惑

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值