博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数模板的使用说明
阅读量:5988 次
发布时间:2019-06-20

本文共 1918 字,大约阅读时间需要 6 分钟。

/* * 函数模板 * 当调用某个函数时,就要以某种方式传递类型给这个函数。那么就能够使用一个函数定义替换前面额全部这些函数定义了。

* 模板就能够做到这一点: * 模板机制是重要的强大的。而且如我们说提到的,在C++的标准模板库(STL)中从头到尾都在是使用它。 * 模板使得类和函数不仅能通过形參接收要被存储和处理的数据值。还能够通过形參接收数据的类型。因此这 * 提供了一种编写通用和易于重用的代码的方法。由于模板定义能够用来创建一个类或函数的多个实例, * 每一个实例都能够存储和处理一种不同类型的数据。

* */ //我们针对数值交换问题写一个函数模板 #include <iostream> #include <string> using namespace std; template <typename DataType> /* * 告诉编译器两件事: * 1.这个是一个函数模板,一个由此能够创建函数的模式 * 2.标识符DataType取代了某个类型形參的名字。当函数被调用时。将被给定一个值 * * 使用形參DataType取代某个特定的类型,定义的剩余部分则简单的规定了程序的行为。在哈苏模板内部和外部 * 它都没有做不论什么事情,当编译器碰到一个模板,比如swap()。它不过简单地存储这个模板而不产生不论什么实际的机器指令 * 他在依据须要的基础上使用模板给出的模式来产生实际的函数定义。 */ void swap(DataType& first,DataType& second) { DataType temp = first; first = second; second = temp; } /* * 函数模板 * 形式: * template <typename TypeParam> * function * 或 * template <class TypeParam> * function * * 更通用的形式: * template <specifier TypePaream1,...,specifier TypeParamn> * function * 在这些形式中。TypeParam,TypeParam1...是表示函数在其上的操作的值的类型的通用类型形參,每一个specifier * 是关键词typename或者class;而function是这个函数的原型或者定义。 * 注意: * 1.单词template是一个C++的关键词,规定其后说跟的是一个函数模式,而不是一个实际的函数原型或者定义 * 2.关键词typename和class能够哎一个类型形參列表中交换使用 * 3.和正规的函数不同,一个函数模板不能被切割为一个包括他们的原型的头文件和一个包括唐门顶一个的编译文件。在不论什么的 * #include函数模板的程序中,他们的定义必须和他们的编译,这样,一种通用的方式将他们放在一个文件里,还有一种方法是 * 将定义放在单独的文件里,可是在函数原型所在的文件的最后#include定义文件。

* 4.一个函数模板不过描写叙述依据给定的实际类型产生不同的函数的一个模式,这个创建函数的过程被称为实例化。在每一个实例化中。 * 类型形參被称为绑定到一个传递给他的实际类型。 * 5.在通用形式中,假设编译器只依靠调用中的实參的类型来决定绑定什么呢类型到类型形參。那么每一个类型形參必须在函数的形 * 參列表中至少出现一次。 */ /* * 一个函数模板的实例化是通过使用以下的算法进行的: * 1.在函数模板的形參列表中的搜索类型形參 * 2.为每一个雷系ing形參推断对应实參的类型 * 3.将这两种类型绑定在一起 */ template <typename ElementType> void display(ElementType array[],int numElement) { for(int i=0;i<numElement;i++) cout << array[i] << " "; cout << endl; } int main() { string first = "C++"; string second = "C"; swap(first,second); double x[] = {1.1,2.1,3.2,4.5,6.5,7.6}; display(x,sizeof(x)/sizeof(double)); int num[] = {1,2,3,4,5,6}; display(num,sizeof(num)/sizeof(int)); }

转载地址:http://wojlx.baihongyu.com/

你可能感兴趣的文章
Java EE之会话
查看>>
第九周作业
查看>>
上传文件过长中间显示省略号
查看>>
BZOJ1972:[SDOI2010]猪国杀(模拟)
查看>>
Redis 命令
查看>>
暴雪《争霸艾泽拉斯》*采用自适应 SSAO
查看>>
ES6入门基础
查看>>
Android 开发人员必须掌握的 10 个开发工具
查看>>
SAS EG第一课练习1
查看>>
Ubuntu14.04安装redis和简单配置
查看>>
游戏Loading中的小提示和Loading动画实现
查看>>
ruby 操作csv
查看>>
算法笔记--极大极小搜索及alpha-beta剪枝
查看>>
对搭档代码的修改意见
查看>>
前端知识点合集
查看>>
新闻网站个人中心(个人信息修改)流程分析
查看>>
20165231 2017-2018-2 《Java程序设计》第3周学习总结
查看>>
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
查看>>
C/C++经典面试题一
查看>>
分布式事务
查看>>