文档章节

c++学习之函数模板应用和重载

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 475
阅读 6
收藏 0

c++语言提供了template关键字用于定义模板。

#include <stdio.h>


template <class type,int nLen>					//定义一个模板类型
type Max(type Array[nLen])					//定义函数模板
{
	type tRet = Array[0];						//定义一个变量
	for(int i=1; i<nLen; i++)					//遍历数组元素
	{
		tRet = (tRet > Array[i])? tRet : Array[i];	//比较数组元素大小
	}
	return tRet;							//返回最大值
}

int main(int argc, char* argv[])
{
	int nArray[5] = {1,2,3,4,5};						//定义一个整型数组
	int nRet = Max<int,5>(nArray);				//调用函数模板Max
	double dbList[3] = {10.5,11.2,9.8};				//定义实数数组
	double dbRet = Max<double,3>(dbList);		//调用函数模板Max

	return 0;
}

其中,template为关键字,表示定义一个模板,<>表示模板参数,模板参数主要有两种,一种是模板类型参数,另一种是模板非类型参数。其后是一个用户定义的合法的标识符,本例为type,也可以是其他合法标识符。



重载函数模板:

具有相同名称但是参数不同的函数模板,成为重载模板。

#include "stdio.h"
#include "iostream.h"


template <class type>					//定义一个模板类型
type Add(type Plus,type Summand)			//定义一个重载的函数模板
{
	return Plus + Summand;				//返回两个数之和
}
template <class type>					//定义一个模板类型
type Add(type Array[], int nLen)				//定义一个重载的函数模板
{
	type tRet = 0;						//定义一个变量
	for(int i=0; i<nLen; i++)				//利用循环累计求和
	{
		tRet += Array[i];
	}
	return tRet;							//返回结果
}


int main(int argc, char* argv[])					//主函数
{
	int nRet = Add(100, 200);					//调用第一个重载的函数模板,实现两个数的求和运算
	cout << "整数之和: " << nRet << endl;		//输出结果
	int nArray[5]= {1, 2, 3, 4, 5};				//定义一个整型数组
	int nSum = Add(nArray, 5);				//调用第2个重载的函数模板,实现数组元素的求和运算
	cout << "数组元素之和:" << nSum << endl;	//输出结果
	return 0;
}


本文转载自:http://blog.csdn.net/bq1073100909/article/details/41086255

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
C++基础教程之string详情

string 初始化 首先,为了在程序中使用string类型,必须包含头文件 。如: #include 注意:这里不是string.h,string.h是C字符串头文件。 string类是一个模板类,位于名字空间std中,还需要加:...

这个人很懒什么都没留下
09/01
0
0
SWIG入门5: C/C++初级特性3

1 函数重载 函数重载这个特性是C++对于C的一个最重要的扩充属性了。对于C语言来说,不可能有两个SYMBOL的名字是相同的,但C++语言为了实现函数重载的这个特性,讲函数的SYMBOL名改成了 ‘函数...

costaxu
2012/08/26
0
0
C++基础教程之C/C++区别

C/C++基础教程之C/C++区别 这是C++教程得第一步,后续会持续更新哦!欢迎新手(具有C基础),老鸟可绕道,可指导。 C++标准输入和输出 C++标准输入和输出分别是cin和cout,用法非常简单 cin>>n...

这个人很懒什么都没留下
09/01
0
0
C++ 0x 之左值与右值、右值引用、移动语义、传导模板

左值与右值 左值与右值的概念要追溯到 C 语言,由 C++ 语言继承了上来。C++ 03 3.10/1 如是说:“Every expression is either an lvalue or an rvalue.”左值与右值是指表达式的属性,而非对...

雅各宾
2013/11/27
0
2
在学校和老师学习C/C++你学到了什么?

计算机行业在未来是一个具有无限潜力的行业,但同样行业竞争力也是十分强烈,同样事靠计算机吃饭的,你是职业叫码农,人家的职业叫程序员,大牛的职业是架构师、分析师,你甘心成为一个日夜加...

悟空_b201
04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
20分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
31分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
43分钟前
1
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
47分钟前
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
56分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部