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");
}

C++(四十二) — 函数模板多态的更多相关文章

  1. NeHe OpenGL教程 第四十二课:多重视口

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. (C/C++学习笔记) 二十二. 标准模板库

    二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ...

  3. 网站开发进阶(四十二)巧用clear:both

    网站开发进阶(四十二)巧用clear:both 前言 我们在制作网页中用div+css或者称xhtml+css都会遇到一些很诡异的情况,明明布局正确,但是整个画面却混乱起来了,有时候在IE6下看的很正 ...

  4. Gradle 1.12用户指南翻译——第四十二章. Announce插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  5. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  6. “全栈2019”Java第四十二章:静态代码块与初始化顺序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗?

    第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗? 几个月前(回到3月份),您可能还记得我在这个系列的52件东西中发布了第23件(可以在这里找到).这篇文章的标题是& ...

  8. 【C++】模板简述(二):函数模板

    我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1 ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——入库管理之六(四十二)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. EasyDSS高性能RTMP/FLV/HLS(m3u8)/RTSP流媒体服务器技术的HTTP QueryString URL的C++实现方案

    EasyDSS支持HTTP GET接口访问,我们需要获取url的各种参数信息 比如 http://ip:port/action?a=1&b=2&c=3 我们需要知道对应的a.b.c的值 ...

  2. [LeetCode] 582. Kill Process 终止进程

    Given n processes, each process has a unique PID (process id) and its PPID (parent process id). Each ...

  3. [JAVA] maven 阿里云节点 settings.xml

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  4. LeetCode 343. 整数拆分(Integer Break) 25

    343. 整数拆分 343. Integer Break 题目描述 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 每日一算法2019/5/2 ...

  5. 09 Spring的依赖注入

    1.依赖注入(Dependency Injection) (1)IOC的作用: 降低程序间的耦合(依赖关系)(2)依赖关系的管理: 以后都交给spring来维护 在当前类需要用到其他类的对象,由spr ...

  6. [转帖]FastDFS图片服务器单机安装步骤

    FastDFS图片服务器单机安装步骤 https://www.cnblogs.com/yuesf/p/11847103.html 前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDF ...

  7. JVM——java内存模型和线程

    概述 计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O.网络通信或者数据库访问上.我们当然不希望处理器大部分时间都处于等待其他资源的状态,要通过一些“手段”去把处理器 ...

  8. 2.Jvm 虚拟机栈和栈帧

    Jvm 虚拟机栈和栈帧 1.栈帧(frames) 官网描述 A frame is used to store data and partial results, as well as to perfo ...

  9. flask框架(七)——蓝图、请求上下文、g对象、信号、flask_session

    蓝图 作用:对程序进行目录结构划分 不使用蓝图情况下,自己分文件 目录结构: -templates -views -__init__.py -user.py -order.py -app.py app ...

  10. CacheManager.Core

    GitHub地址:https://github.com/MichaCo/CacheManager CacheManager的优点: 让开发人员的生活更容易处理和配资缓存,即使是非常复杂的缓存方案. C ...