`
- 浏览:
1396853 次
- 性别:
- 来自:
北京
-
/**********************************************************************
* <模板>
*模板是一种参数化的类或函数,也就是类的形态或者函数的形态可以被参数改变.
***********************************************************************/
/**//**********************************************************************
* <模板函数> */
template <class T> T funname(para type)
/**//*自我理解:
* 如果要计算int型和float型数组的平均值,可以分别写int_average(int nVal,*int size)和
*float_average(int nVal,int size)两个函数,但其实它们里面的步骤是一*样的,只是数据类型
*不同,如果使用模板,就不需要这么麻烦了。
***********************************************************************/
//例1:
template <class T> average(T *array,int size)
...{
T sum = 0;
for(int i=0;i<size;i++)
sum += array[i];
T avg = sum/size;
return avg;
};
//"<class T>"告诉编译器"T"是函数使用的数据类型。
//提示:模板函数最好写在头文件中,但必须要写在main()前面
//例2:
template <class T>
T max(T x,T y) //传入的参数改必须是同类型的
...{
return (x>y) ? x:y;
}
void main()
...{
double a = 50.235;
double b = 50.234;
double c = max(a,b);
cout<<"最大值="<<c<<endl;
}
//函数模板经实例化所生成的具体函数叫"模板函数";
//例如例1,可以实例化成 average(int,int)、average(float,float)、average(char,char) 等等...
//每一个模板形参前必须有"class"关键字!
//在template语句与函数模板语句之间不允许有别的语句;
/**//**********************************************************************
* <多类型模板函数>
*
* 如上题数组,若数组中所有元素之和超过类型范围怎么办?可用多类型*函数模板解决
***********************************************************************/
//例:
template <class T1,class T2>
T1 average(T1 *array,T2,int size)//声明函数模板
...{
T2 sum = 0;
for(int i=0;i<size;i++)
sum+=array[i];
return(sum/i);
}
void main()
...{
__int16 intArray[]=...{10000,20000,30000}; // 范围 -32768 - 32767
cout<<"整数平均值="<<::average(intArray,3)<<endl;
}
/**//* 自我理解
此例中,当T1接收了__int16 intArray[]后,它俨然就成了__int16型了,但要命的是,数组中的
数字相加后,会超界,so...再定义一个T2,用T2来接收相加后的的数据,T2会根据数据的大小来
确定自己的类型。 */
/**//**********************************************************************
* <模板函数的重载>
* 因为模板函数需要接收同类型的参数,要是参数类型不一致怎么办?可以使用函数重载.
***********************************************************************/
template<class T>
T max(T x,T y) //传入的参数改必须是同类型的
...{
return (x>y) ? x:y ;
}
int max(int x ,char y) //重载函数 max,一个整型参数,一个字符型参数
...{
return (x>y) ? x:y ;
}
void main()
...{
int a = 55;
// int b = 66;
char b = 'A'; //ASCII 码 65
cout<<"最大值="<<max(a,b)<<endl; //此处将调用重载函数
}
/**//**********************************************************************
* <类模板>
***********************************************************************/
const int size = 10;
template <class T>
class stack
...{
T stck[size]; //模板定义数组的数据类型
public:
//若成员函数中使用了模板,则此函数需要在类体外定义!!!
void push(T ch); //模板定义形参类型
T pop(); //模板定义返回类型
};
template <class T> //注意:在类体外实现成员函数时的写法!!!
void stack<T>::push(T ob)
...{
}
template <class T> //注意:在类体外实现成员函数时的写法!!!
T stack<T>::pop()
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
C++补充-模板,针对很多东西进行了解析,相当好的东西,值得参考!希望对你有用!
c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件模板 c++文件...
服务端-c++-sql-数据库-数据分析-技术主管-个人简历模板.doc
C++程序设计与实践:11-模板和泛型编程.ppt
介绍的是利用模板匹配的原理来识别例如数字、汉字等。
C++模板与STL库介绍 非常详细
介绍c++中的类属机制--模板,适合C++初学者。
c++程序设计语言--------------9-模板.ppt
《C++标准模板库编程实战》介绍最新的C++14标准的API、库和扩展,以及如何将它们运用到C++14程序中。在书中,作者Ivor Horton 则阐述了什么是STL,以及如何将它们应用到程序中。我们将学习如何使用容器、迭代器,...
c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...
在2020年训练时的代码-模板-初赛-比赛的综合 并包括CCR,QQ,屏幕画图,ppt等 欢迎大家下载
C++_STL标准模板库中的string
谷歌开源团队近日发布了C++ B-Tree,这是一个C++模板库,实现了基于B-tree数据结构的有序内存容器。类似于STL的map、set、multimap和multiset模板,C++ B-tree也提供了btree_map、btree_set、btree_multimap和btree_...
基于C++的ACM-ICPC模板
用C++实现了数据结构中的顺序表,并且使用了面向对象知识中的类模板
由浅入深学C++基础进阶与必做300题 源程序 解压后122M C++是近年广泛使用的程序设计语言,由C语言的基础上发展而来,实现 了由面向过程到面向对象的转变,全面支持面向对象的程序设计方法。C++ 语言在软件工业领域...