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 主要存 ...
随机推荐
- dubbo负载均衡策略和集群容错策略
dubbo负载均衡策略 random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权 ...
- ixcache的蜜汁突发故障
公元2018年 7月29日 晚上21点整,我司一直正常运行的ixcache线路异常断开. ??? 公司业务包含提供互联网接入服务,所以这个现象将会导致用户上网体验变差,网速变慢,看视频的速度下降等等, ...
- python常用模块之sys, os, random
一. sys模块 1. 作用: sys模块是与python解释器交互的一个接口 2. 具体使用 1. sys.argv 获取当前正在执行的命令行列表, 第一个为程序本身路径 print('file n ...
- pytest以函数形式的测试用例
from __future__ import print_function#pytest以函数形式形成测试用例def setup_module(module): print('\nsetup_modu ...
- POJ 2728 Desert King(最优比率生成树, 01分数规划)
题意: 给定n个村子的坐标(x,y)和高度z, 求出修n-1条路连通所有村子, 并且让 修路花费/修路长度 最少的值 两个村子修一条路, 修路花费 = abs(高度差), 修路长度 = 欧氏距离 分析 ...
- 什么是Etcd?
文章大部分引至:http://jolestar.com/etcd-architecture/ Etcd 按照官方介绍 Etcd is a distributed, consistent key-val ...
- 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧
zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...
- 一篇文章告诉你,TLS 1.3 如何用性能为 HTTPS 正名
序•魔戒再现 几天前,OpenSSL 官方宣布即将发布的新版本 (OpenSSL 1.1.1) 将会提供 TLS 1.3 的支持,而且还会和之前的 1.1.0 版本完全兼容,这当然是个好消息. ...
- noj 2033 一页书的书 [ dp + 组合数 ]
传送门 一页书的书 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 53 测试通过 : 1 ...
- 谈谈APP架构选型:React Native还是HBuilder
原文链接 导读:最近公司的一款新产品APP要进行研发,老大的意思想用H5来做混合APP以达到高效敏捷开发的目的.我自然就开始进行各种技术选型的调研,这里重点想说的是我最后挑选出的2款hybrid ap ...