1、函数模板(参数多态)

  相当于一个函数发生器,参数多态,可以重载。

  普通函数和模板函数的本质区别

  1. 普通函数的调用,可以进行隐式的类型转换;
  2. 函数模板的调用,使用类型参数化,严格按照类型进行匹配,不会进行类型的自动转换;

  一个函数模板可以取代许多具体的函数定义,可以大大减少编程工作量。

#include <iostream>
#include <typeinfo>
using namespace std; template <typename P> //函数模板
void ArrayInput(P array, int num)
{
cout << "输入" << num << "个" << typeid(P).name()
<< "\b" << "型数据" << endl;
for (int j = ; j < num; j++)
cin >> array[j];
}
void main()
{
int number;
float floatArray[];
int intArray[];
number = sizeof(floatArray) / sizeof(float);
ArrayInput(floatArray, number);
number = sizeof(intArray) / sizeof(int);
ArrayInput(intArray, number);
system("pause");
}

2、类模板

  使用类模板来定义栈类,进栈、出栈。

#include <iostream>
#include <typeinfo>
using namespace std; template <class T,int i> //函数模板
class MyStack
{
private:
//栈空间:Buffer[0]~Buffer[i-1],Buffer[i]表示栈底
T Buffer[i + ];
int size;
int top;
public:
MyStack(T zero)
{
size = i;
top = i;
for (int j = ; j <= i; j++) //初始化缓冲区
{
Buffer[j] = zero;
}
}
void push(const T item);
T pop();
}; template <class T,int i> // 模板类成员函数的定义
void MyStack<T, i>::push(const T item)
{
if (top > )
Buffer[--top] = item;
else
cout << "栈溢出" << endl;
} template <class T,int i>
T MyStack<T, i>::pop()
{
T temp;
if (top < size)
temp = Buffer[top++];
else
{
temp = Buffer[top];
cout << "栈已空" << endl;
}
return temp;
} void main()
{
MyStack<int, > S1();
S1.push();
cout << S1.pop() << endl;
MyStack<char*, > S2("empty");
S2.push("china");
cout << S2.pop() << endl;
cout << S2.pop() << endl;
system("pause");
}

最新文章

  1. runtime梳理。
  2. The property on could not be set to a &#39;Int16&#39; value.You must set this property to a non-null value of type ‘Int32’.”
  3. Java中常量小知识
  4. openwrt编译出错处理记录
  5. MySQL------Navicat激活方法
  6. select2搜索框查询加遍历
  7. 渲染引擎之Camera
  8. java jmx
  9. Win7\xp添加虚拟网Microsoft Loopback Adapter
  10. ACM—最大连续子序列(HDOJ1003)
  11. hdu 1059 多重背包 背包指数分块
  12. Describe the difference between repeater, bridge and router.
  13. Java内存管理原理及内存区域详解
  14. 【POJ2396】Budget(上下界网络流)
  15. hdu - 3572 - Task
  16. Vue.js实例
  17. 【原创】Kafka Consumer多线程实例续篇
  18. linq中group by
  19. go defer (go延迟函数)
  20. java_web学习(十一) 层的概念与应用

热门文章

  1. KAFKA:如何做到1秒发布百万级条消息
  2. IDEA进行activiti-archetype-unittest脚手架的安装
  3. 最新 学霸君java校招面经 (含整理过的面试题大全)
  4. SpringBoot + Mybatis搭建完整的项目架构
  5. docker深入学习二
  6. D03-R语言基础学习
  7. AS3灰色图像
  8. tkinter学习笔记_05
  9. charles4.0 request和response的显示设置
  10. Oracle.EntityFrameworkCore使用时报错:ORA-00933:SQL命令未正确结束