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

Cpp学习——模板

模板?

目录

模板?

1.介绍

2.函数模板的使用

3.函数模板的强制转换or显式调用

四,模板的分类


1.介绍

在Cpp3.0中,祖师爷便引入了模板的概念。这是一个重大的变革,为后来的Cpp标准化打下了铺垫。也正是因为有了模板,Cpp才能有STL库。这么好的东西,那我们今天就浅浅的了解一下吧:和现实生活中的模板一样,Cpp模板的作用就是当一个模子来将一些重复的事件来作标准化的快速处理。比如说一些在逻辑上重复的代码,可以通过函数重载来运行,但还是太麻烦,如swap函数,通过函数重载的方式来实现的话就是这样的:

void swap(int* p1, int* p2)//实现整型的交换
{int temp = *p1;*p1 = *p2;*p2 = temp;
}void swap(char* p1, char* p2)//实现字符型的交换
{char temp = *p1;*p1 = *p2;*p2 = temp;
}void swap(double* p1, double* p2)//实现双精度浮点型的交换
{double temp = *p1;*p1 = *p2;*p2 = temp;
}

那通过函数模板是怎么实现的呢?

2.函数模板的使用

 要使用模板,首先得清楚的知道一个叫做template的关键字。这个关键字是用来定义函数模板变量的。

1.定义方式:template <class T>或者template<typename T>。在定义好这个虚拟类型变量以后再用这个T来代替函数中的类型便可以使用模板了。如:

template<class T>
void Swap(T& p1, T& p2)
{T temp = p1;p1 = p2;p2 = temp;
}

在搞好了这个模板以后,但凡是要搞交换逻辑的代码并且要交换的两者类型相同的代码都可以用这份模板来支持。

2.定义多个模板虚拟类型。定义多个虚拟的方式如下:template<class T1,class T2>。这样便定义了多个虚拟类型。当我们实现一个加法函数时可能是小数加小数,也可能是整数加整数,还可能是小数加整数。所以为了实现这样的加法便可以使用模板定义出两个虚拟类型再实现这个函数,如:

template <class T1,class T2>
T2 Add(T1 p1, T2 p2)
{return p1 + p2;
}

3.函数模板的强制转换or显式调用

其实在有些情况下我们是需要显式调用函数模板的,如下面的情况:

template<class T>
T* func(int n)
{return new T[n];
}

这种情况下不显示调用函数模板便会出问题。所以,为了调用这个函数便要进行强转的操作,语法如下:函数名<类型>( 参数/无参),如这个函数我要进行变成整型的调用操作如下:

int* ptr = func<int>(10);

四,模板的分类

模板分为函数模板与类模板。上面介绍的都是函数模板。类模板其实也差不多,就是写一个类然后将类的类型用虚拟模板类型代替便可以生成一个类模板了。

初尝模板就到这里了。

 

http://www.lryc.cn/news/109719.html

相关文章:

  • HTTP 协议 版本详解
  • PHP语言基础知识(超详细)
  • Flex弹性盒子的项目属性
  • 广州银行信用卡中心:强化数字引擎安全,实现业务稳步增长
  • 【Rust日报】2023-08-03 - Polars 获约 400 万美元种子轮融资
  • 装修小程序,开启装修公司智能化服务的新时代
  • 使用PHP和Redis实现简单秒杀功能
  • C#开发FFMPEG例子(API方式) FFmpeg拉取udp组播流并播放
  • Android性能优化—图片优化
  • 如何搭建自动化测试框架?资深测试整理的PO模式,一套打通自动化...
  • 软件外包开发的GO语言特点
  • 【深度学习Week4】MobileNet_ShuffleNet
  • 649. Dota2 参议院
  • 无人机管控平台,推动电力巡检管理水平提升
  • 阿里云平台WoSignSSL证书应用案例
  • 服务器时钟同步
  • AMEYA360:瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code
  • JSP--Java的服务器页面
  • 07 Ubuntu中使用poetry工具管理python环境——巨详细!!!
  • 射影平面 与 射影变换
  • (202307)wonderful-sql:决胜秋招(task6)
  • Scratch 教程:如何实现文本分割
  • 安全基础 --- 编码(02)+ form表单实现交互
  • 华为OD机考真题--五子棋--带答案
  • 把网站改为HTTPS访问方法
  • 【BASH】回顾与知识点梳理(四)
  • 阿里云安全组设置
  • QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 终篇
  • 代码随想录算法训练营第六十天|单调栈part03|● 84.柱状图中最大的矩形
  • TCP的三次握手四次挥手