C++(四十二) — 函数模板多态
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");
}
C++(四十二) — 函数模板多态的更多相关文章
- NeHe OpenGL教程 第四十二课:多重视口
		转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ... 
- (C/C++学习笔记) 二十二. 标准模板库
		二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ... 
- 网站开发进阶(四十二)巧用clear:both
		网站开发进阶(四十二)巧用clear:both 前言 我们在制作网页中用div+css或者称xhtml+css都会遇到一些很诡异的情况,明明布局正确,但是整个画面却混乱起来了,有时候在IE6下看的很正 ... 
- Gradle 1.12用户指南翻译——第四十二章. Announce插件
		本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ... 
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
		0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ... 
- “全栈2019”Java第四十二章:静态代码块与初始化顺序
		难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ... 
- 第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗?
		第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗? 几个月前(回到3月份),您可能还记得我在这个系列的52件东西中发布了第23件(可以在这里找到).这篇文章的标题是& ... 
- 【C++】模板简述(二):函数模板
		我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1 ... 
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之六(四十二)
		abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ... 
随机推荐
- Metricbeat 轻量型指标采集器
			一.介绍 用于从系统和服务收集指标.从 CPU 到内存,从 Redis 到 Nginx,Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据. 1.系统级监控,更简洁(轻量型指标采 ... 
- 【神经网络与深度学习】【计算机视觉】Fast R-CNN
			转自:https://zhuanlan.zhihu.com/p/24780395?refer=xiaoleimlnote 首先声明:本文很多内容来自两个博客: RCNN, Fast-RCNN, Fas ... 
- Influx Sql系列教程一:database 数据库
			对于influxdb而言,database和我们更熟悉的mysql中的dababse没有什么特别的区别,可以将数据库简单理解为一堆表(measurement)的集合,接下来我们将看一下在influxd ... 
- java-统计一段句子中各单词出现的次数
			问题:统计一段句子中各单词出现的次数. 思路: 1.使用split方法将文章进行分割,我们这里以空格.逗号和句点为分隔符,然后存到一个字符串数组中. 2.创建一个hashMap集合,key是字符串类型 ... 
- PHP计算两个坐标之间的距离
			<?php /** * 计算两点之间的距离 * @param $lng1 经度1 * @param $lat1 纬度1 * @param $lng2 经度2 * @param $lat2 纬度2 ... 
- LeetCode 205. 同构字符串(Isomorphic Strings)
			205. 同构字符串 205. Isomorphic Strings 
- K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署
			Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ... 
- mysql网文收录
			1.分布式事务 1) 聊聊分布式事务,再说说解决方案 https://www.cnblogs.com/savorboard/p/distributed-system-transaction-cons ... 
- leetcode两数相加
			题目描述:给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ... 
- Layui + thymeleaf   org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: " 错误解决
			解决方法: 1.将layui的代码移动到新的js文件当中,用template模板引擎的方式引入: <script th:src="@{/static/js/facility/mover ... 
