C++语言笔记系列之二十——模版

1.任意输入两个数x和y,输出最大值max。
int max(int x, int y)
{return x>y?x:y;}
2.函数模版
(1)用一种或者多种通用类型去表示函数——函数模版。
(2)函数模版由于没有具体的数据类型,所以函数模版不可运行。
(3)作用:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
注:函数模版在调用时必须用具体的类型来替代,使之转换为一个具体函数。
3.函数模版的定义:
template <class T>
A.模版定义的关键词:template
<class T>用来说明一个通用类型T。
B.class T只用来表示一种类型,也可以表示多个通用类型:
<class T1, class T2, class T3, ..., class Tn>
4.函数模版的调用
(1)将函数模版作为一个函数调用。
(2)系统将自动按照调用表达式实参的类型来替代函数模版中的通用类型,使之转化为一个具体函数然后执行。
example 1

#include <iostream.h>

template <class T>
T max(T x, T y)
{return x>y?x:y;}
int main()
{
    int x = 3, y = 4;
    double d1 = 2.3, d2 = 3.4;
    long l1 = 32L, l2 = 35L;
    cout<<max(x, y)<<endl;
    cout<<max(d1, d2)<<endl;
    cout<<max(l1, l2)<<endl;
}
程序输出:
4
3.4
35
分析:由于实参x,y为int类型,系统自动将模版中的类型T用int来替代。
函数转化:int max(int x, int y) {return x>y?:x:y;}

example 2

#include <iostream.h>

template <class T>
void exchange(T &x, T &y, T &z)
{
    T t;
    if(x>y) {t = x; x = y; y = z;}
    if(x>z) {t = x; x = z; z = t;}
    if(y>z) {t = y; y = z; z = t;}
}
5.函数模版的重载
(1)函数模版允许隐性类型转换。
(2)函数模版重载时不允许重载为一个模版——函数模版的重载只可以是一个具体的显性函数。
(3)函数模版的重载只可以在函数模版不可调用时,系统将自动的通过隐式类型转换后调用函数模版时重载。
example 3

#include <iostream.h>

template <class T>
T max(T x, T y)
{
    cout<<"This is T max()."<<endl;
    return x>y?x:y;
}
double max(int x, double y)
{
    cout<<"This is double max()."<<endl;
    return x>y?x:y;
}
int main()
{
    int x1 = 2, x2 = 3;
    double d1 = 2.3, d2 = 3.4;
    long l1 = 3L, l2 = 5L;
    cout<<max(x1, x2)<<endl; //调模版
    cout<<max(l1, l2)<<endl; //调模版
    cout<<max(x1, l2)<<endl; //调重载
    cout<<max(x1, d2)<<endl; //调重载
    cout<<max(d1, d2)<<endl; //调模版
}
程序输出:
This is T max().
3
This is T max().
5
This is double max().
5
This is double max().
3.4
This is double max().
3.4
模版的重载只能够有一个具体的函数。
6.类模版
template <class T>
class Tany
{
    T x, y;
public:
    Tany(T xx, T yy):x(xx),y(yy) {}
    T getx() {return x;}
    T gety() {return y;}
};
类模板的具体化实现:
(1)通过类模板创建对象时由具体类型替代模版类型。
(2)类模版对象的定义
类名<具体类型>对象名(初始化列表)
若有多个通用类型必须表示多个具体类型
例如:Tany <int> objint(3, 4);
      Tany <double> objdouble(3.4, 5.6);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值