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);

C++语言笔记系列之二十——模版的更多相关文章

  1. Java 设计模式系列(二十)状态模式

    Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...

  2. 《sed的流艺术之四》-linux命令五分钟系列之二十四

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  3. 《sed的流艺术之二》-linux命令五分钟系列之二十二

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  4. WebService学习笔记系列(二)

    soap(简单对象访问协议),它是在http基础之上传递xml格式数据的协议.soap协议分为两个版本,soap1.1和soap1.2. 在学习webservice时我们有一个必备工具叫做tcpmon ...

  5. ComicEnhancerPro 系列教程二十:用“文件比较”看有损、无损

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程二十:用“文件比较” ...

  6. C++语言笔记系列之十二——C++的继承

    C++的继承 1.继承方式 public(公有继承) 派生类中的成员能够訪问基类的public成员和protected成员,但不能訪问基类的private成员. 派生类的对象仅仅能訪问基类的publi ...

  7. Go语言核心36讲(Go语言实战与应用二十二)--学习笔记

    44 | 使用os包中的API (上) 我们今天要讲的是os代码包中的 API.这个代码包可以让我们拥有操控计算机操作系统的能力. 前导内容:os 包中的 API 这个代码包提供的都是平台不相关的 A ...

  8. Go语言核心36讲(Go语言实战与应用二十四)--学习笔记

    46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. s ...

  9. Go语言核心36讲(Go语言实战与应用二十六)--学习笔记

    48 | 程序性能分析基础(上) 作为拾遗的部分,今天我们来讲讲与 Go 程序性能分析有关的基础知识. Go 语言为程序开发者们提供了丰富的性能分析 API,和非常好用的标准工具.这些 API 主要存 ...

随机推荐

  1. js 上传头像img

    <label> <div class="myusercenter-image-none"> <img src="" class=& ...

  2. dotTrace激活服务器

    http://active.09l.me IntelliJ IDEA 7.0 或 更高DataGrip 1.0或更高ReSharper 3.1 或更高ReSharper Cpp 1.0 或更高dotT ...

  3. (8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)

    rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成数字签名.验证数字签名.加密和解密文件. pkeyutl是非对称加密的通用工具,大体上和rsautl的用法差不多,所以此处只 ...

  4. 使用finalshll连接linux

    一.安装ubuntu: 我在window10上装了VMware,好像window10自带虚拟机吧;然后傻瓜式装机,装好后发现没网不知道什么原因,然后百度啪啦啪啦找了一堆,解决方法是: 然后重启下ubu ...

  5. BERT模型介绍

    前不久,谷歌AI团队新发布的BERT模型,在NLP业内引起巨大反响,认为是NLP领域里程碑式的进步.BERT模型在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越 ...

  6. Postfix mail for azengna.com loops back to myself -solve

    设置 /etc/postfix/main.cf 原配置 mydestination = $myhostname, localhost.$mydomain, localhost 改为 mydestina ...

  7. 记第一次开发安卓应用——IT之家RSS阅读器

    这个学期学校开了安卓的课程,因为自己一直学习wp的开发,一直用的是.net和Silverlight这一套,也着实没有太多时间投入安卓的方向去,因为想着毕业也不从事安卓的工作,所以也一直没有怎么研究.但 ...

  8. python016 Python3 数据结构

    Python3 数据结构本章节我们主要结合前面所学的知识点来介绍Python数据结构. 列表Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元 ...

  9. ZOJ 2478 Encoding

    Encoding Time Limit: 2 Seconds      Memory Limit: 65536 KB Given a string containing only 'A' - 'Z', ...

  10. Java实验--课上提到的随机数生成原理简单实现(不利用库生成随机数的简单算法)

    对于随机数的实验,根据课程上的教程,有如下的公式: 对应的变量参数的说明: 其中对应的Mouduls变量对应的就是公式中a的值,在公式中的含义就是相当于要循环多少个数才重复的一个值. Multipli ...