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);
C++语言笔记系列之二十——模版的更多相关文章
- Java 设计模式系列(二十)状态模式
Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...
- 《sed的流艺术之四》-linux命令五分钟系列之二十四
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之二》-linux命令五分钟系列之二十二
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- WebService学习笔记系列(二)
soap(简单对象访问协议),它是在http基础之上传递xml格式数据的协议.soap协议分为两个版本,soap1.1和soap1.2. 在学习webservice时我们有一个必备工具叫做tcpmon ...
- ComicEnhancerPro 系列教程二十:用“文件比较”看有损、无损
作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程二十:用“文件比较” ...
- C++语言笔记系列之十二——C++的继承
C++的继承 1.继承方式 public(公有继承) 派生类中的成员能够訪问基类的public成员和protected成员,但不能訪问基类的private成员. 派生类的对象仅仅能訪问基类的publi ...
- Go语言核心36讲(Go语言实战与应用二十二)--学习笔记
44 | 使用os包中的API (上) 我们今天要讲的是os代码包中的 API.这个代码包可以让我们拥有操控计算机操作系统的能力. 前导内容:os 包中的 API 这个代码包提供的都是平台不相关的 A ...
- Go语言核心36讲(Go语言实战与应用二十四)--学习笔记
46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. s ...
- Go语言核心36讲(Go语言实战与应用二十六)--学习笔记
48 | 程序性能分析基础(上) 作为拾遗的部分,今天我们来讲讲与 Go 程序性能分析有关的基础知识. Go 语言为程序开发者们提供了丰富的性能分析 API,和非常好用的标准工具.这些 API 主要存 ...
随机推荐
- FileZilla Server安装配置教程
1. FileZilla官网下载FileZilla Server服务器,目前最新版本为0.9.53. 2. 安装FileZilla服务器.除以下声明的地方外,其它均采用默认模式,如安装路径等. 2.1 ...
- react-native 在新版Xcode(10+)中运行出现的问题: node_modules/react-native/third-party/glog-0.3.4 , C compiler cannot create executables
报错发生在 react-native : 0.55.4 (或存在于更低的版本) 报错: ----/node_modules/react-native/third-party/glog-0.3.4': ...
- Linux组和提权
目 录 第1章 组命名管理** 1 1.1 group组信息和密码信息 1 1.1.1 /etc/group 组账户信息 1 1.1.2 /etc/gshadow 组密码信息 ...
- htmlpurifier的使用
什么是htmlpurifier?? HTML Purifier是一个可以用来移除所有恶意代码(XSS),而且还能确保你的页面遵循W3C的标准规范的PHP类库. 在php里解决XSS最简单的方法是使用h ...
- 一张图表,人人都能建立自己的AARRR运营模型
每次跟同行聊运营,聊用户,聊产品,最后都会回到AARRR模型上来,这个用户全生命周期模型概括了互联网产品运营的5个关键环节. 获客是运营的基础,促进用户活跃才能让产品有生命力,提升留存减少流失让用户规 ...
- python022 Python3 面向对象
Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触 ...
- ms sql server 大批量导入
BULK INSERT 文章:BULK INSERT如何将大量数据高效地导入SQL Server 可以首先在数据库建一个表Temp_tb,这个表作为导入数据的表,然后使用bulk insert导入,导 ...
- COJ 1211 大整数开平方
手写求大整数开根号所得到的值,具体计算过程参考别人的资料,最后利用java的大整数得到答案 别人博客链接:http://www.cnblogs.com/Rinyo/archive/2012/12/16 ...
- POJ2479【DP 枚举】
题意:给出一串数字,求出其中不重不交的两个子串的和的最大值 思路:最近最大子串和做多了,感觉这题有点水.枚举分割点,将序列分成左右两串,然后看左右串的最大子串和的最大值. //poj2479 #inc ...
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...