C++(四十二) — 函数模板多态
2024-10-21 14:39:57
1、函数模板(参数多态)
相当于一个函数发生器,参数多态,可以重载。
普通函数和模板函数的本质区别:
- 普通函数的调用,可以进行隐式的类型转换;
- 函数模板的调用,使用类型参数化,严格按照类型进行匹配,不会进行类型的自动转换;
一个函数模板可以取代许多具体的函数定义,可以大大减少编程工作量。
#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");
}
最新文章
- runtime梳理。
- 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’.”
- Java中常量小知识
- openwrt编译出错处理记录
- MySQL------Navicat激活方法
- select2搜索框查询加遍历
- 渲染引擎之Camera
- java jmx
- Win7\xp添加虚拟网Microsoft Loopback Adapter
- ACM—最大连续子序列(HDOJ1003)
- hdu 1059 多重背包 背包指数分块
- Describe the difference between repeater, bridge and router.
- Java内存管理原理及内存区域详解
- 【POJ2396】Budget(上下界网络流)
- hdu - 3572 - Task
- Vue.js实例
- 【原创】Kafka Consumer多线程实例续篇
- linq中group by
- go defer (go延迟函数)
- java_web学习(十一) 层的概念与应用