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. Dockerfile实例

    一.先看最简单的例子,定制nginx镜像,打印出 <h1>Hello, Docker!</h1> Dockerfile文件: FROM nginx RUN echo '< ...

  2. 【linux基础】ubuntu16.04 安装后,屏幕分辨率过低且不可调节

    前言 安装CUDA和NVIDIA驱动之后,屏幕分辨率过低且不可调节,尝试了几种方法都没成功解决,特此讲解决方法记录下来. 解决过程 注销进入登录界面,按ctrl+alt+F1进入命令行终端,输入账户名 ...

  3. [LeetCode] 264. Ugly Number II 丑陋数 II

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  4. [LeetCode] 407. Trapping Rain Water II 收集雨水 II

    Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati ...

  5. 玩转CONSUL(3)–大规模部署的性能开销定量分析

    1. 引言 今天有朋友问萌叔,consul能否在大规模生产环境下进行应用.场景是总计大约10w+台机器,分为3 ~ 4个机房,单个机房最多3w万+机器.这个问题大的,可把萌叔吓了跳,部门里面consu ...

  6. 对QT多线程以及事件投递的理解

    1.使用QObject子类的movetothread方法 代替 QThread子类的run 实现多线程. 使用原始QThread对象的start方法启动线程==>连接原始QThread对象的st ...

  7. springboot实战日记(一)数据库基本信息

    摘要:基于spring boot的后端实现,开发一个微信小程序点餐系统,主要是写写思路和遇到的问题以及分享读到的好文章. 项目分析: 1.角色划分,就是开有什么人使用这个系统,买家(手机端),卖家(p ...

  8. sourcetree在mac上的使用

    sourcetree是git在Mac上管理代码的ui工具,当然你也可以使用命令直接使用git来管理代码,sourcetree下载下载地址:https://www.sourcetreeapp.com. ...

  9. Module 'mysql' already loaded in Unknown on line 0解决方法

    Module 'mysql' already loaded in Unknown on line 0解决方法 直接进入php.ini 把;extension=mysql.so注释掉就好了

  10. python excel导入到数据库

    import xlrd import MySQLdb def inMySQL(file_name): wb = xlrd.open_workbook(file_name) sh = wb.sheet_ ...