[C++开发 03 _ 模板(167)]

知识点1:模板

1.1模板的概念

 模板的特点:

  • 模板不可以直接使用,它只是一个框架
  • 模板的通用并不是万能的

1.2函数模板

1.2.1函数模板语法

函数模板的引入:

函数模板的举例:

 总结:

  • 函数模板利用关键字template
  • 使用函数模板有两种方式:1、自动类型推导     2、显示指定类型
  • 模板的目的是为了提高复用性,将类型参数化。
1.2.2函数模板注意事项

如果在调用函数时,不去确定T的类型,没法调用函数,会报错,因为编译也推导不出来是什么类型。调用函数的时候,要说明类型,func<int>();

总结:

  • 使用模板时必须确定出通用数据类型T,并且能够推导出一致的类型
1.2.3函数模板案例

 

1.2.4普通函数与函数模板的区别

隐式类型转换:

        int add(int a,int b);

调用时:传入两个float类型的变量,也可以编译通过,也能运行起来,这个就叫隐式类型转换。

总结:建议使用显示类型的方式,调用函数模板,因为可以自己确定通用类型T。

1.2.5普通函数与和函数模板的调用规则

1.2.6模板的局限性

 

总结:

利用具体化的模板,可以解决自定义类型的通用化

学习模板并不是为了写模板,而是在STL能够运用系统提供的模板

1.3类模板

1.3.1类模板语法

 总结:类模板和函数模板语法相识,在声明模板template后面加类,此类称为类模板

1.3.2类模板与函数模板的区别

 

 ​​​​类模板可以有默认类型参数

将上面的类模板参数改写,其他不变

 

 总结:

  • 类模板使用只能用显示指定类型参数。
  • 类模板中的模板参数列表可以有默认参数。
1.3.3类模板中成员函数创建时机

 总结:

        类模板中的成员函数,并不是一开始就创建的,在调用时才去创建。

1.3.4类模板对象做函数参数

 

 总结:

  • 通过类模板创建的对象,可以有三种方式向函数中进行传参
  • 使用比较广泛的是第一中:指定传入类型
1.3.5类模板与继承

总结:如果父类是类模板,子类需要指定出父类中T的数据类型。

1.3.6类模板成员函数类外实现

总结:
因为在类外实现所以T1和T2函数是不知道是什么的,所以要template<class T1,class T2>;
类模板中函数类外实现要加上类模板参数列表加以和普通类区分。

1.3.7类模板分文件编写

 

总结:类模板分文件编写,因为类模板中的成员函数,并不是一开始就创建的,在调用时才去创建。所以分文件编写时不能连接到一起。所以我们再解决的时候,直接将类模板的声明和实现都写再同一个文件中,区别其他的头文件,我们将该类文件的扩展名改为.hpp。这样当别人看到这个.hpp文件的时候,就知道这是一个类模板,里面既有类的声明,也有类的实现。

1.3.8类模板与友元

总结:建议全局函数做类内实现,用法简单,而且编译器可以直接识别。

1.3.9类模板案例

需求分析:

MyArray.hpp文件

MyArray.cpp文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git使用的常用指令

git作为一个版本控制工具&#xff0c;和maven并合称为实习的两大杀手工具。今天我来给大家介绍一下git的常用指令&#xff0c;帮助大家在实习和多人协同开发的时候提供一些帮助。 找到git管理的文件夹 命令1 git init 这个命令是为了初始化本地库 命令2 查看当前的git状态…

冷冻冷藏的技术介绍

风 幕 技 术 为食品展示提供储存条件的敞开式冷冻冷藏设备是如何实现保温的? “风幕”——看不见的隔热屏障 空气动力优化的多级挤压试风幕&#xff0c;有效阻止外部湿热空气的进入&#xff1b;同时将蒸发器上的冷量带到柜内&#xff0c;带走柜内食品的热量&#xff0c;从而达…

Pandas.Series.count() 非空单元格计数 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.1.2 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 Pandas稳定版更新及变动内容整合专题&#xff1a; Pandas稳定版更新及变动迭持续更新。 Pandas API参…

R 语言学习 case3:柱状图(ggchart)

主要涉及到对图的优化&#xff0c;使用ggchart工具包 ggchart 链接&#xff1a;https://thomas-neitmann.github.io/ggcharts/index.html step1: 安装工具包 install.packages("ggcharts") install.packages("tidytext")step2: 导入工具包 library(dplyr…

springboot111在线教育系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的在线教育系统 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资…

彩色图像处理之伪彩色图像处理的python实现——数字图像处理

原理 伪彩色图像处理是一种多源信息融合的可视化方法。 处理对象:伪彩色图像处理的对象是多波段遥感图像,例如近红外带、红外带和可见光图像等。 原理:选择不同波段的原始图像作为新的三原色通道(如近红外为红色通道),按RGB模式合成伪彩色图像。 目的:利用不同波段信息融合,实…

51单片机原理及应用张毅刚版课后习题以及答案

AT89S51单片机内部集成了哪些外围功能部件 ①8位微处理器CPU ②数据存储器 128B RAM ③程序存储器 ④4个8位可编程并行I/O口 ⑤1个全双工的异步串行口 ⑥2个可编程的16位定时器/计数器 ⑦1个看门狗定时器WDT ⑧中断系统具有五个中断源 五个中断向量 ⑨特殊功能寄存器SFR 26个…

企业计算机服务器中了360后缀勒索病毒怎么办,360勒索病毒解密流程

计算机网络技术的不断应用&#xff0c;极大地提升了企业办公与生产效率&#xff0c;为企业提供了极大方便&#xff0c;但同时也为企业的数据安全埋下隐患&#xff0c;近期云天数据恢复中心再次接到企业的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒攻击&#xff…

k8s 使用cert-manager证书管理自签

个人建议使用安装更快&#xff0c;比helm快&#xff0c;还要等待安装crd kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml#官网 https://cert-manager.io/docs/installation/kubectl/#创建自签的ClusterIssuer c…

centos7安装Redis7.2.4

文章目录 下载Redis解压Redis安装gcc依赖&#xff08;Redis是C语言编写的&#xff0c;编译需要&#xff09;编译安装src目录下二进制文件安装到/usr/local/bin修改redis.conf文件启动redis服务外部连接测试 参考&#xff1a; 在centos中安装redis-5.0.7 Memory overcommit must…

webpack 核心武器:loader 和 plugin 的使用指南(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

《Linux C编程实战》笔记:信号的捕捉和处理

Linux系统中对信号的处理主要由signal和sigaction函数来完成&#xff0c;另外还会介绍一个函数pause&#xff0c;它可以用来响应任何信号&#xff0c;不过不做任何处理 signal函数 #include <signal.h> void (*signal(int signum, void (*handler)(int)))(int);可以分解…

VMware workstation安装FreeBSD14.0虚拟机并配置网络

VMware workstation安装FreeBSD14.0虚拟机并配置网络 FreeBSD是类UNIX操作系统&#xff0c;FreeBSD带有多个软件包&#xff0c;并覆盖了广阔的应用领域&#xff0c;且都是免费和易于安装的。该文档适用于在VMware workstation平台安装FreeBSD14.0虚拟机。 1.安装准备 1.1安装…

蓝桥杯-dfs(一)

&#x1f4d1;前言 本文主要是【算法】——dfs使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#xff1…

怎么提升搜狗网站排名

在当今数字化时代&#xff0c;网站排名对于品牌、企业以及个人都至关重要。而对于许多网站来说&#xff0c;搜狗搜索引擎是一个重要的流量来源。为了在搜狗上取得更好的排名&#xff0c;不仅需要优化网站内容&#xff0c;还需要巧妙运用一些工具和技巧。在本文中&#xff0c;我…

计算机安全学习笔记(V):UDP和网络扫描

User Datagram Protocol (UDP) UDP是最简单的传输协议。多个程序&#xff08;服务&#xff09;可以在主机上侦听&#xff0c;因此操作系统需要知道将流量发送到哪个程序。 在传输协议中&#xff0c;每个程序都与源和目标处的端口相关联&#xff0c;该端口显示为程序的套接字。…

Linux设备管理模型-02:sysfs

文章目录 sysfs1 使用sysfs控制GPIO2 sysfs编程2.1 完善sysfs属性文件的读写操作 上一篇文: 设备管理模型中的基础数据结构 sysfs sysfs是用于导出内核对象的文件系统&#xff0c;它是一个基于ram的文件系统&#xff0c;最初基于ramfs。 sysfs通常挂载在/sys目录下。它提供了一…

nginx日志分割

日志切割是线上常见的操作&#xff0c;能够控制单个日志文件的大小&#xff0c;便于对日志进行管理 给nginx主进程发送一个重新打开的信号&#xff0c;让nginx重新生成新的日志文件 nginx -s reopen 这个命令等同于kill -USR1 cat nginx.pid 切割日志文件shell命令 #!/bin/bas…

网站转小程序系统,任意网址打包成小程序

源码介绍 将任意网站打包成小程序&#xff0c;只需简单修改域名&#xff0c;即可轻松实现&#xff01;这一创新技术让您的网站内容在小程序平台上焕发新生。通过智能转换工具&#xff0c;您可以将任意网站迅速转化为小程序&#xff0c;无需繁琐的编码和开发工作。只需简单修改…

vue3-模版引用

模版引用 ref 属性 场景&#xff1a;需要直接访问底层 DOM 元素。 方法&#xff1a;使用特殊的 ref 属性。 <input ref"input">ref 属性 允许我们在一个特定的 DOM 元素或子组件实例被挂载后&#xff0c;获得对它的直接引用。 访问模板引用 小 Demo: 当 i…