C++之模板template

    C++中的模板可以分为三类:class template,function template,member template。

    类模板Class Template

template<typename T>
class complex
{
public:
  complex(T r = 0, T i = 0)
  : re(r), im(i)
  {}
  complex& operator += (const complex&)
  T real() const { return re; }
  T imag() const { return im; }
private:
  T re, im;
};
complex<double> c1(2.5,1.5);
complex<int> c2(2,6);

    函数模板Function Template

#include<iostream>

using std::cout;
using std::endl;

class stone
{
public:
  stone(int w = 0, int h = 0, int we = 0)
  : _w(w), _h(h), _weight(we) 
  {}
	
  bool operator< (const stone& rhs) const
  {
    return _weight < rhs._weight;
  }
private:
  int _w, _h, _weight;
};

template<class T> 
inline
const T& min(const T& a, const T& b)
{
  return a < b ? a : b;
}

int main()
{
  stone r1(2,3,2), r2(2,3,3), r3;
  r3 = min(r1, r2);
}

    编译器会对function template进行实参推导(argument deduction),当调用min函数时,编译器就会自动知道类型T为stone,再调用stone::operator<

    成员模板Member template

template<class T1, class T2>
struct pair
{
  typedef T1 first_type;
  typedef T2 second_type;

  T1 first;
  T2 second;

  pair()
  : first(T1()), second(T2()) {}
  pair(const T1& a, const T2& b)
  : first(a), second(b) {}
  
  template<class U1, class U2> //member template
  pair(const pair<U1, U2>& p)
  : first(p.first), second(p.second) {}
};

    在上面的程序中,类pair(表示一对)有三个构造函数,其中第三个构造函数就用到了成员模板。成员模板参数为U1、U2,类模板参数为T1、T2,都可变。可以用它来表示继承关系,鱼类和鸟类为基类Base,鲫鱼和麻雀为子类Derived。



    把一个由鲫鱼和麻雀构成的pair,放进(拷贝到)一个由鱼类和鸟类构成的pair中,是可以的。但是反之,是不行的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值