C++基础(10)——函数模板和类模板

news2024/11/25 16:24:59

前言

本文主要介绍了C++中函数模板和类模板基本知识

6.1:函数模板

模板函数的定义

template<typename T>+函数的定义或声明

模板函数的两种使用方法(编译器自动推测、显示指定T的类型)

注意事项:模板一定要确定指出T的数据类型才可以使用;T由编译器自动推导出来,如果类型不一致也不可以使用

6.2:普通函数和模板函数的区别和调用规则

普通函数可以发生自动类型转换。模板函数如果使用自动类型推导不能发生自动类型转换;模板函数如果使用显示指定类型可以发生自动类型转换。

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

1:如果普通函数和模板函数重名且都可以调用,优先调用普通函数

2:通过空模板的方式强制调用模板函数

3:模板函数也可以发生重载

4:如果模板函数可以产生更好的匹配,优先使用模板函数(防止普通函数的自动类型转换)

6.3:模板函数的局限性(函数模板具体化)

模板函数传入的参数不是万能的,有一定的限制

通过运算符重载可以实现自定义数据类型的比较

也写一个指定T类型的模板函数,之后编译器会优先调用这个函数

6.4:类模板概念和函数模板比较

类模板定义:

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

使用类模板的时候要指定数据类型,编译器不会自己推导,模板函数会自己推导

类模板中的成员函数不是在一开始就创建的,而是在运行的时候创建的

6.5:类模板对象做函数的参数

 1:直接指定参数类型void func1(Person<string, int> &p) 

 2:参数模板化

打印一下T1,T2的类型typeid(T1).name()

3:将整个类进行模板化

6.6:类模板和继承

当子类继承的父类是一个模板函数时,要先指定T的类型,要不然编译器不知道给子类开辟多大的内存空间。同理父类模板想用sizeof打印大小时也需要先指定T的类型

如果想灵活指定父类模板中T的类型,子类也需要模板化

6.7:类模板的类外实现

6.8:类模板的分文件编写和解决

将类的定义和成员函数的实现分开写,在调用模板类创建对象,使用类外实现的成员函数会报错,因为类的成员函数是在运行时才创建

main.cpp

person.h

person.cpp

如果只调用类内实现的showName()函数是不会报错的

因为main.cpp中只包含了person.h文件,main.cpp是不知道showAge()具体是怎么实现的,编译的时候会报错

将类的定义和类成员函数放在同一个文件中,然后再main.cpp中进行包含就不会报错了

person.hpp

6.9:类模板和友元

1:全局友元函数类内实现

main.cpp

person.hpp

打印一下T1、T2数据类型

2:全局函数类外实现

总结

以上就是本文的全部内容,非常感谢你能看到这

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

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

相关文章

nuxt打包后文件过大的优化

在使用nuxt.js来做项目的时候&#xff0c;遇到了加载缓慢的问题。解决思路如下 1、大文件拆分 2、文件压缩 大文件拆分 通过nuxt build --analyze或者nuxt build -a命令来启用 在package.json中 添加–analyze&#xff0c;然后执行npm run build 打包后如下&#xff1a; …

MySQL数据库——事物

MySQL数据库——事物 一、事务的概念二、事务的ACID特点1.原子性2.一致性3.隔离性4.持久性5.事务隔离级别的作用范围 三、事务级别的查看与设置1.查询全局事务隔离级别2.查询会话事务隔离级别3.设置全局事务隔离级别4.设置会话事务隔离级别 四、事务控制语句1.测试提交事务2.测…

threeJs着色器

一、着色器 着色器&#xff08;Shaders &#xff09;是一种使用GLSL(OpenGL Shading Language)编写并在GPU上运行的程序。它们被用于定位几何体的每个顶点&#xff0c;并为该几何体的每个可见像素着色。使用“像素Pixel”来描述其实并不准确&#xff0c;因为渲染的每个点不一定…

神经网络小结:训练的全过程

这一节我们主要是将之前的知识穿起来&#xff0c;形成一个整体。如果之前的没看过可以回翻一下专栏。但是在整体回归之前&#xff0c;我们还需要学习一个小知识点——随机初始化 随机初始化 在神经网络中&#xff0c;我们大致的训练流程就是&#xff1a;通过前向传播得出当前…

指针和数组--指针和二维数组的关系

指针和二维数组的关系 目录 一、二维数组的行地址和列地址 二、通过二维数组的行指针和列指针来引用二维数组元素 一、二维数组的行地址和列地址 在C语言中&#xff0c;可将一个二维数组看成是由若干个一维数组构成的。例如若有下面的定义&#xff1a; int a[3][4]&#xf…

8、DuiLib创建子窗口

文章目录 1、创建子窗口2、创建子窗口 XML 配置文件 1、创建子窗口 一个大规模的应用不可能只有一个窗口&#xff0c;之前我们的案例都是在一个窗口实现的&#xff0c;接下来我们实现一个关于窗口&#xff0c;来介绍如何通过 DuiLib 实现子窗口管理。 2、创建子窗口 XML 配置…

小红书种草软文怎么写?教你几招

小红书种草软文写得好&#xff0c;能打消用户的疑虑&#xff0c;吸引更多的用户关注和购买你的产品&#xff0c;从而获得源源不断的流量和口碑&#xff0c;小红书种草软文怎么写&#xff1f;接下来伯乐网络传媒就来给大家讲解一下&#xff0c;教你几招超实用的方法&#xff01;…

MMSegmentation V0.27.0官方问题(包含多尺度设置)(四)

1、在单个 GPU 上再现性能 #179&#xff08;添加链接描述&#xff09; 2、如何使用 PyTorch 的 WeightedRandomSampler 或编写自定义采样器添加链接描述 4、使用独立的分段器 #2931添加链接描述 5、How to change the training policy from Iter to Epoch based on the existin…

【产品运营】如何通过数据分析掌握用户行为?

对于运营来说&#xff0c;需要掌握用户行为来制定不同的运营策略。而用户行为是通过数据分析得出的&#xff0c;那么&#xff0c;具体的数据分析是哪些数据&#xff0c;不同的数据又有什么区别&#xff1f; 通过本文能够学到什么&#xff1f; 快速了解一款APP。行业趋势&#…

完美解决 ---latex运行正常,但是公式显示有问题,latex公式不显示等号 = 和加号 +

文章目录 一、问题展示二、分析原因三、 我的解决办法四、 \usepackage{txfonts}宏包是什么&#xff1f;五、\usepackage{amsmath}宏包是什么&#xff1f;总结 一、问题展示 latex运行正常&#xff0c;但是公式显示有问题&#xff0c;latex公式不显示等号 和加号 二、分析原…

C++基础(9)——文件操作

前言 本文主要介绍了C中文件操作基本知识 5.1&#xff1a;C语言使用标准C库函数读写文件复习 fgets、fputs&#xff08;读写文本文件&#xff09; int main(int argc, char *argv[]) {FILE *file;file fopen("a.txt", "a");if (file NULL){perror(&q…

flutter项目启动安卓模拟器不好使的问题

这里写自定义目录标题 一. 新建的flutter项目安卓模拟器不能使用二当上面操作完成以后,新建的flutter项目可以使用安卓模拟器,但是老项目不好使的解决方法 在flutter项目中,ios模拟器好使,安卓模拟器不好使. 分为2种情况: 一. 新建的flutter项目安卓模拟器不能使用 但是在and…

专业的性能测试工具都具备哪些特点?

在软件开发和系统运行过程中&#xff0c;性能是一个关键的指标&#xff0c;直接影响到用户体验和系统的可靠性。为了确保软件和系统的性能达到预期水平&#xff0c;专业的性能测试工具成为必不可少的一环。那专业的性能测试工具都具备哪些特点&#xff1f;探讨其在软件开发和系…

分享几个免费设计生成及参考工具(第三期)

今天来给大家分享几个国外免费的设计生成工具 Uxcrush https://www.uxcrush.com/ 一个收集优秀 Figma 资源的网站&#xff0c;包括网站模板、移动模板、UI套件、图标、设备模型、插画等等。希望为 Figma 用户提供一个方便找到最适合他们设计项目或学习目标的资源站。 unpromp…

用Python写了一个下载网站所有内容的软件,可见即可下

目录标题 前言效果展示环境介绍:代码实战获取数据获取视频采集弹幕采集评论 GUI部分尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 今天我们分享一个用Python写下载视频弹幕评论的代码。 顺便把这些写成GUI&#xff0c;把这些功能放到一起让朋友用起来更方便~ 效果…

FAQ页面在SaaS产品中的应用

随着云计算和软件即服务&#xff08;SaaS&#xff09;的快速发展&#xff0c;越来越多的企业选择将业务迁移到云端&#xff0c;以更好地管理和运营他们的业务。在这种背景下&#xff0c;SaaS产品的出现成为了企业管理和运营的新趋势。SaaS产品通过云端的方式&#xff0c;为企业…

【linux】不小心对整个/usr/目录执行了chmod 777命令,如何恢复故障的权限设定

一、问题背景 在安装ansys的时候&#xff0c;脑子抽风&#xff0c;以为/usr/目录是共享目录&#xff0c;直接把所有文件或目录的权限完全设置为全用户自由读写和执行即可。 但是没想到执行了命令sudo chmod -R 777 /usr/命令之后&#xff0c;出现了一大堆sudo权限错误。 较为…

基于AT89S52单片机的多功能电子万年历

1、 项目介绍&#xff08;设计内容&#xff09; 基于AT89S52单片机的多功能电子万年历的硬件结构和软硬件设计方法。本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统以AT89S52单片机为控制器&#xff0c;以串行时钟日历芯片DS1302记录日历…

小程序中各类二维码、小程序码,在各种场景下,长按识别支持情况验证结果

近期由于业务涉及到小程序长按识别加群、关注公众号等业务&#xff0c;各类场景下的支持情况&#xff0c;官方文档也没有特别具体的说明&#xff0c;所以整体做了一些测试。测试结果如下&#xff0c;如果有一些不准确或者未验证的情况&#xff0c;欢迎大家指正、补充哈~ 小程序…

Unity核心8——模型导入

一、模型导入概述 ​ Unity 支持很多模型格式。比如 .fbx /.dae /.3ds /.dxf /.obj 等等。 ​ 99%的模型都不是在 Unity 中制作的&#xff0c;都是美术人员在建模软件中制作&#xff0c;如 3DMax、Maya 等等。 ​ 当他们制作完模型后&#xff0c;虽然 Unity 支持很多模型格式…