C++ 模板函数与模板类
一、模板函数
函数模板提供了一类函数的抽象,即代表了一类函数。当函数模板被实例化后,它会生成具体的模板函数。例如下面便是一个函数模板:
当实际调用它时,就会生成具体的模板函数:
模板函数在调用过程中会进行数据类型的自动匹配(在不产生歧义的情况下),但如果需要指定类型的话,可以显示声明,如:
这样,函数模板中的T就会被double所代替。
自动匹配有以下的规则:
1) 函数实参是否满足模板的实参(此时的判断没有数据类型的转换);
2) 若不满足1), 函数实参进行数据转换在进行匹配;
3) 若依旧不满足,则会编译错误。
例如:我们声明了下面两个函数:
当我们如此调用时:
调用的是第二个max函数,因为第一个无法完成T的匹配,所以就会将字符B转换成整型,把9转成double型,从而调用第二个函数。
二、模板类
模板类的使用和模板函数相似,只是在具体化模板类时需要显示声明模板实参,例如我们构造了一个模板类stack:
T表示类型,capacity表示初始化时Stack的规定容量。
当我们在书写类方法时,其格式如下:
每一个类方法之前都要加上一个template的说明,其类名也要加上模板参数,而其在调用的时候格式如下;
如上,我们声明了一个类型为int, 容量为15的Stack,接下来就可以使用类中的各种类方法了。
//End.
C++ 模板函数与模板类的更多相关文章
- C++高级 STL——模板函数、模板类
1.模板函数 // 定义 template <class T> Max(T &t1, T &t2) { return ((t1 > t2) ? t1 : t2); } ...
- C++中模板函数或模板类中关键词class和typename
##区别 基本上来说,class和typename几乎没有区别.在可以使用class的地方都可以使用typename,在使用typename的地方也几乎可以使用class. 可以看出我加黑了两个子:几 ...
- C++模板的实现(模板函数和模板类,附带模板实现顺序表和链表代码)
文章链接:https://blog.csdn.net/qq_38646470/article/details/80209469
- 从一个模板函数聊聊模板函数里面如何获得T的名字
写了个小程序,遇到点问题.总结总结,学习学习 #include<vector> #include<iostream> #include<typeinfo> usin ...
- 为什么模板函数的声明和实现都放在.h文件中
当你不使用这个模板函数或模板类,编译器并不实例化它,当你使用时,编译器需要实例化它,因为编译器是一次只能处理一个编译单元,也就是一次处理一个cpp文件,所以实例化时需要看到该模板的完整定义.所以都放在 ...
- [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断
参考:http://blog.csdn.net/beyondhaven/article/details/4204345 参考:http://blog.csdn.net/joeblackzqq/arti ...
- c++复习基础要点02 虚函数与模板 与static inline是否共存
1. 虚函数能否定义为模板函数 当一个类有虚函数时,它一定有一个虚表,用来纪录每个虚函数的实际地址.这也就是说这个虚表的大小是在编译期就确定了的.有多少个虚函数,虚表就纪录几个. ...
- C++: 模板函数定义与声明分离;
我们知道模板函数或模板类的定义一般都是和声明一起在头文件中,但是这样的话, 就暴露了内部实现,有什么办法能够将定义和声明进行分离呢? 答案是: 有的: 头文件: test.h; class test ...
- [转]C++函数模板与模板函数
1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. ...
随机推荐
- java编程思想-java 异常使用指南
应该在以下情况下使用异常: 在恰当的级别处理问题(在知道该如何处理的情况下才捕获异常). 解决问题并且重新调用产生异常的方法. 进行少许修补,然后绕过异常发生的地方继续执行. 用别的数据进行计算,以代 ...
- python学习笔记-(一)初识python
1.python的前世今生 想要充分的了解一个人,无外乎首先充分了解他的过去和现在:咱们学习语言也是一样的套路 1.1 python的历史 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈp ...
- Struts2入门-十分简单的登陆
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. 开始编写St ...
- JavaScript排序算法——选择排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaWeb学习笔记——Tomcat相关
Tomcat目录分析 1.bin 存放启动和关闭Tomcat的脚本文件 2.conf 存放Tomcat服务器的各种配置文件 3.lib 存放Tomcat服务器的支持jar包 4.logs 存放T ...
- Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)
Settings > Editor > Zooming resizes all editors
- SSAO相关资料
http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/a-simple-and-pract ...
- thinkphp安装 版本 3.1.3
基础版: 只有thinkphp基础运行功能 完整版:基础运行能力,还有图片.上传等各种处理类(建议下载完整版) 重要的三个变量 define('APP_DEBUG',True); // 定义应用目录d ...
- Linux下MySQL忘记密码
系统:CentOS6.6 64位 参考文档(截图请看原网址): Linux下MySQL忘记root密码怎么办_百度经验 http://jingyan.baidu.com/article/1709ad8 ...
- nginx和fpm的进程数配置和502,504错误
502 和 php-fpm.conf 1.php-cgi进程数不够用.php执行时间长,导致没有空闲进程处理新请求. 2.php-cgi进程死掉.php-fpm超时时间短,当前进程执行超时关闭连接. ...