成都网站建设设计

将想法与焦点和您一起共享

c++模板-创新互联

文章目录
  • 前言
  • 一、函数模板1
  • 二、类模板
  • 总结

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都做网站、中阳网络推广、小程序开发、中阳网络营销、中阳企业策划、中阳品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;成都创新互联公司为所有大学生创业者提供中阳建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
前言

模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。

一、函数模板

函数的重载可以实现一个函数名多用,将是实现相同或类似功能的函数用一个函数名定义,虽然含义清楚,但仍要分别定义每一个函数,为此,c++提供函数模板。建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就是函数模板。

#includeusing namespace stdl
template//模板声明,T为类型参数
T max(T a,T b,T c)
{
    if(b>a)  a=b;
    if(c>a)  a=c;
    return a;
}
int main()
{
    int i1=185, i2=-76, i3=5678,i;
    double d1=5.11, d2=231.12, d3=-3214.78,d;
    long g1=67854,g2=-912456,g3=673456,g;
    i=max(i1,i2,i3);//调用模板函数,T被int取代
    d=max(d1,d2,d3);
    g=max(g1,g2,g3);
    cout<

上面就是一个简单的模板函数。

不难看出,定义函数模板的一般形式为:

template函数定义

此外,typename可换成class。

template的含义即是模板,<>中先写关键字typename(或class),后面跟一个类型参数T,T是一个虚拟的类型名 ,表明他是一个类型名但并未指明具体类型。从而,在函数定义是用T来定义的变量a,b,c也是未确定的。当函数调用时,编译器会根据实参的类型来确定T的类型。

class与typename作用相同,可以互换,但为了与类class区分,一般用typename。

需要注意的是,函数模板只适用于函数体相同,函数参数个数相同而数据类型不同的情况,如果参数个数不同,则不能使用函数模板。

二、类模板 1.与函数模板类似,有时,有两个或多个类,其功能相同,仅仅是数据类型不同

如下面声明了一个类,用来比较两个整数的大小。

class Compare_int 
{
   public:
     Compare_int (int a,int b)//定义构造函数
        {x=a;y=b;}
     int max()
     {return (x>y)?x:y;}
     int min()
     {return (x

但如果想对两个浮点数作比较,还需要重新声明一个类:

class Compare_float 
{
   public:
     Compare_float (float a,float b)//定义构造函数
        {x=a;y=b;}
    float max()
     {return (x>y)?x:y;}
    float min()
     {return (x

显然,这基本上是重复性的工作,所以,c++增加了template功能,用来减少重复。 

2.类模板

对于上面两个类,可以声明一个通用的模板,他可以有一个或多个虚拟的类型参数

template//声明一个模板,虚拟类型名为numtype
class Compare

  {
       public:
         Compare(numtype a, numtype b)//定义构造函数
           {x=a;y=b;}
          numtype max()
           {return (x>y)?x:y;}
          numtype min()
           {return (x

与前面Compare_int不同的是:1.声明类模板要增加一行 template2.原有的类型名int换成虚拟类型参数名numtype

可以这样说类模板是类的抽象,类是类模板的实例。

类模板的使用

类定义对象的方法:Compare_int com(4,7);  ,类模板定义对象与此类似,但不能直接写Compare com(4,7);因为Compare只是类模板名,他不是一个具体的类,类模板中的类型numtype不是一个实际的类型,只是一个虚拟的类型,不能用来定义对象。因此,我们需要一个实际的类型名来取代虚拟类型 如下:

Comparecom(4,7);

不难看出,其一般形式为:类模板名<实际类型名>对象名(参数)


总结:可以这样声明和使用类模板

1:先写出一个实际的类(如上面的Compare_int)

2:将此类准备改变的类型名(如int改为float)改成虚拟类型名(如上面的numtype)

3:在类声明前加一行

template

4:用类模板定义对象

类模板名<实际类型名>对象名;

类模板名<实际类型名>对象名(实参表);

如: 

Comparecom;

Comparecom(3,7);

5:如果在类模板外定义成员函数,应写成类模板形式:

template

函数类型 类模板名<虚拟类型参数>::成员函数名(函数形参表){……}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:c++模板-创新互联
转载源于:http://chengdu.cdxwcx.cn/article/dejecg.html