C++快速入门 (十五) 模板

本文详细介绍了C++中的模板和泛型编程,涵盖模板函数、模板类、重载、typename与class的区别、嵌套、非类型模板形参等内容,并进一步探讨了模板特化,包括函数和类模板的特化以及偏特化,为C++开发者提供了全面的模板使用指南。
摘要由CSDN通过智能技术生成

一,模板和泛型

(1). 泛型编程
一般的函数只能对固定某一系列(基类及其派生类)类型进行操作。如

int  Add( const   int  &   t1,   const   int  &   t2)
{
      return   t1  +   t2  ;
}

该函数只能应用于 int 类型。显然不太利于重用(顺便提一句,面向对象的终极目标就是重用最大化)。如果写代码时可以使用某个占位符来替换实际的类型,编译时再确定,其重用性就大大提高。这种思想就叫做 泛型编程。C++中实现泛型的机制被称为模板。

(2). 模板函数
C++使用模板来实现泛型编程。 模板使用 关键字template 声明,放在要定义泛型的函数或类之前。

template <typename T>
T  Add( const   T  &   t1  ,   const   T  &   t2  )
{
      return   t1  +   t2  ;
}


其中   使用 关键字 typename 来定义占位符名称并放在一对尖括号中而泛型函数使用起来和普通函数一样。下边为一个完整示例

class   Base
{
public  :
      int  num;
      Base  operator+ (   const   Base  &   ba)   const
    {
          Base  tem;
        tem.num = num +   ba  .num;
          return  tem;
    }
};

template <typename T>
T Add(const T & t1 , const T & t2 )
{
      return   t1  +   t2  ;
}
int   _tmain  ( int   argc,   _TCHAR*   argv  [])
{
      Base  b1,b2;
    b1.num = 10;
    b2.num = 20;
      Base   b3 =  Add<Base>(b1,b2) ;
    cout << b3.num << endl;
}
//return: 30


模板 函数在调用时也可以不声明或只声明一部分(未声明类型需放在最右边)模板参数类型,因为编译器会根据实参类型自动推导获得。

Base  b3 =  Add(b1,b2) ;


(3). 模板函数重载
模板函数也支持重载。无论是模板类型参数不同 或者 函数签名不同(一般重载) 的同名函数 ,都视为重载。

template   <typename T>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值