当前位置: 首页 > news >正文

C++ 61 之 函数模版

#include <iostream>
#include <string>
using namespace std;void swapInt(int &a,int &b){int temp = a;a = b;b = temp;
}void swapDou(double& a, double& b){double temp = a;a = b;b = temp;
}// T代表通用数据类型,紧接着后面的代码,出现T,代表通用数据类型 只能下面紧挨着的函数能用
template<typename T>    
// 写法1:自动类型推导,推导出的数据类型 必须一致才行
void newSwap(T &a, T &b){T temp = a;a = b;b = temp;
}// 只能下面紧挨着的函数能用
// 模板不能单独使用,务必要指定出T才可以使用
template<typename T>
void newSwap2(){}int main()
{int a = 1;int b = 2;double c2 = 2.2;// 写法1:自动类型推导// swapInt(a, b);// newSwap(a, b);// newSwap(a, c2); // 报错 两个参数类型务必一致// 写法2:显示指定类型newSwap<int>(a,b);cout << "a: " << a << endl;cout << "b: " << b << endl;// newSwap2(); // 自动类型推导写法如果不再函数中指定T,就无法调用函数newSwap2<int>(); // 显示指定类型写法指定了T的类型,才可以调用 // double c = 1.1;// double d = 2.2;// swapDou(c, d);// cout << "c: " << c << endl;// cout << "d: " << d << endl;// newSwap(c, d);return 0;
}

 

c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就成为函数模板。凡是函数体相同的函数都可以用这个模板代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。泛型编程

  • c++提供两种模板机制:函数模板类模板
  • 类属 - 类型参数化,又称参数模板

总结:

  1. 模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属。
  1. 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。

相关文章:

  • 【八股系列】shouldComponentUpdate是为了解决什么问题?(React)
  • CentOS OpenVPN 客户端连接配置
  • 椭圆的几何要素
  • 计算机专业的发展前景与选择建议。
  • 主流框架选择:React、Angular、Vue的详细比较
  • 【React】useState 的原理
  • 思聪私生女能继位吗?王健林表态,家族不会亏待
  • 常用的工具:pdf转换器、流程图
  • 视频汇聚安防综合管理系统EasyCVR平台GB28181设备注册未上线的原因排查与解决
  • Linux命令详解
  • vue生成二维码跳转到小程序
  • 每日练题(py,c,cpp).6_19,6_20
  • python-录音文件转换成文字
  • 智谱API调用
  • Apollo9.0 PNC源码学习之Routing模块
  • @jsonView过滤属性
  • axios 和 cookie 的那些事
  • Effective Java 笔记(一)
  • idea + plantuml 画流程图
  • jdbc就是这么简单
  • js中的正则表达式入门
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 简单易用的leetcode开发测试工具(npm)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 通过npm或yarn自动生成vue组件
  • 延迟脚本的方式
  • python最赚钱的4个方向,你最心动的是哪个?
  • 昨天1024程序员节,我故意写了个死循环~
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Redis 实现计数器和限速器的
  • ​比特币大跌的 2 个原因
  • #1014 : Trie树
  • #预处理和函数的对比以及条件编译
  • $.proxy和$.extend
  • (1)Hilt的基本概念和使用
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (Java入门)抽象类,接口,内部类
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (黑马C++)L06 重载与继承
  • (一)Linux+Windows下安装ffmpeg
  • (转)ObjectiveC 深浅拷贝学习
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)负载均衡,回话保持,cookie
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • *2 echo、printf、mkdir命令的应用
  • .md即markdown文件的基本常用编写语法
  • .NET Core Web APi类库如何内嵌运行?
  • .Net MVC4 上传大文件,并保存表单
  • .net 按比例显示图片的缩略图
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 命令行参数包含应用程序路径吗?
  • :如何用SQL脚本保存存储过程返回的结果集
  • @angular/cli项目构建--http(2)