c++高阶-1-模板
文章目录
- 模板
- 一、模板基本语法
- 二、函数模板
- 1.基本语法
- 2.函数模板注意事项
- 3.普通函数和函数模板区别
- 4.普通函数和函数模板调用规则
- 三、类模板
- 1.基本语法
- 2.类模板和函数模板的区别
- 3.类模板中成员函数调用时机
- 4.类模板对象做函数参数
- 5.类模板与继承
- 6.成员函数的类外实现
模板
一、模板基本语法
template <typename T>
- template – 声明创建模板。
- typename —表明其后面的符号是一种数据类型,可使用class代替。
- T —通用的数据类型,名称可以替换,通常用大写字母。
二、函数模板
1.基本语法
template<typename T>
void swap(T& a,T& b)
{T temp = a;a = b;b = a;
}
使用这个模板,有2种调用方法。
//1.自动类型推到
int a = 10;
int b = 20;
swqp(a,b);//2.显示指定数据类型
swap<int>(a,b);
2.函数模板注意事项
- 自动类推导,必须推导出相同的数据类型,才可以使用。
- 模板必须确定数据类型T才可以使用。
3.普通函数和函数模板区别
- 普通函数调用时可以实现隐式类型转换。
- 函数模板使用自动类型推导,不可以实现隐式类型转换。
- 函数模板使用显示指定类型,可以实现隐式类型转换。
普通函数 | 函数模板-自动类型推导 | 函数模板-显示指定类型 | |
---|---|---|---|
隐式类型转换 | √ | × | √ |
4.普通函数和函数模板调用规则
- 如果函数模板和普通函数都可以调用,优先调用普通函数。
- 可以使用空模板参数列表,调用模板函数。
- 函数模板可以发生函数重载。
- 如果函数模板可以产生更好的匹配,优先调用函数模板。
void print(int a,int b)
{cout << "普通函数" << endl;cout << a << endl;cout << b << endl;
}template<typename T>
void print(T a,T b)
{cout << "模板函数" << endl;cout << a << endl;cout << b << endl;
}template<typename T>
void print(T a,T b,T c)
{cout << "模板函数" << endl;cout << a << endl;cout << b << endl;cout << c << endl;
}int main()
{int a = 10;int b = 20;//调用普通函数print(a,b);//调用模板函数print<>(a,b);//函数重载print(a,b,10);return 0;
}
三、类模板
1.基本语法
template <typename T,typename Y>
class Persion
{
public:T name;Y age;
};
2.类模板和函数模板的区别
- 类模板没有自动类型推导的使用方式。
- 类模板在模板参数列表中可以有默认参数。
//带有默认参数
template<typename T, typename Y = int>
class Person
{
public:T name;Y age;
};
3.类模板中成员函数调用时机
类模板中的成员函数在调用时才创建。
4.类模板对象做函数参数
template<typename T1, typename T2>
class Person
{
public:T1 name;T2 age;
};
- 指定传入的类型(最常用)
void test0(Person<string, int>& p)
{.....
}
- 参数模板化
template<typename T1,typename T2>
void test1(Person<T1,T2>& p)
{....
}
- 整个类模板化
template<typename T>
void test2(T& p)
{....
}
5.类模板与继承
- 当子类继承的父类是一个类模板时,子类在声明的时候,要指出父类的类型。
- 如果不指定,编译器无法给子类分配内存。
- 如果想灵活指定父类中T的类型,子类也需变为类模板。
template<typename T>
class Base
{T name;
};//指定父类的类型
class Son:public Base<int>
{};//子类变为模板类
template<typename T>
class Son :public Base<T>
{
};
6.成员函数的类外实现
template<typename T1,typename T2>
class Person
{
public:T1 name;T2 age;void show();
};//成员函数类外实现
template<typename T1,typename T2>
void Person<T1,T2>::show()
{....
}
相关文章:
c++高阶-1-模板
文章目录 模板一、模板基本语法二、函数模板1.基本语法2.函数模板注意事项3.普通函数和函数模板区别4.普通函数和函数模板调用规则 三、类模板1.基本语法2.类模板和函数模板的区别3.类模板中成员函数调用时机4.类模板对象做函数参数5.类模板与继承6.成员函数的类外实现 模板 一…...

.net core 的 winform 的 浏览器控件 WebView2
在.NET Core WinForms应用程序中,没有直接的“浏览器控件”,因为WinForms不支持像WebBrowser控件那样的功能。但是,你可以使用WebView2控件,它是一个基于Chromium的浏览器内核,可以在WinForms应用程序中嵌入Web内容。 …...

Django QuerySet对象,all()方法
all()方法 在Django中,all()方法是QuerySet对象的一个方法,用于获取模型的所有实例。 当你调用ModelName.objects.all()时,Django会生成一个SQL查询,从数据库中获取该模型的所有记录,并返回一个QuerySet对象…...
自动生成网站sitemap
要在 Next.js 和 Contentlayer 项目中实现自动生成 Sitemap 的功能,你可以编写一个脚本,在每次生成文档后自动生成 Sitemap。以下是一个示例脚本,你可以根据自己的需求进行调整。 步骤 1:安装必要的依赖 首先,你需要…...

中国经济昆虫志(55卷)
中国经济昆虫志,共55卷,内容包括概述、形态特征、分类等。各级分类单元均编有检索表,每个种有特征描述、地理分布,有的还记载有生活习性和防治方法。为便于鉴定,绘制有特征图和彩色图。 包括鞘翅目天牛科、半翅目蝽科、…...
linux环境安装elasticsearch缓存数据库和Kibana客户端
linux环境安装elasticsearch缓存数据库,今天我们安装7.17.18版本,并分析遇到的问题。 一、elasticsearch安装运行 1、直接下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.18-linux-x86_64.tar.gz2、解压 tar -…...

OpenSSL的一些使用案例
目录 一、介绍 二、基本使用 1、Shell (1)文件加解密 (2)生成密钥文件 2、API (1)md5sum (2)AES256加解密 一、介绍 本篇博客重点不是详细描述 OpenSSL 的用法,只…...

常用字符串方法<python>
导言 在python中内置了许多的字符串方法,使用字符串方法可以方便快捷解决很多问题,所以本文将要介绍一些常用的字符串方法。 目录 导言 string.center(width[,fillchar]) string.capitalize() string.count(sub[,start[,end]]) string.join(iterabl…...

线程池666666
1. 作用 线程池内部维护了多个工作线程,每个工作线程都会去任务队列中拿取任务并执行,当执行完一个任务后不是马上销毁,而是继续保留执行其它任务。显然,线程池提高了多线程的复用率,减少了创建和销毁线程的时间。 2…...

Python28-5 k-means算法
k-means 算法介绍 k-means 算法是一种经典的聚类算法,其目的是将数据集分成 ( k ) 个不同的簇,每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置,使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…...

主流国产服务器操作系统技术分析
主流国产服务器操作系统 信创 "信创",即信息技术应用创新,作为科技自立自强的核心词汇,在我国信息化建设的进程中扮演着至关重要的角色。自2016年起步,2020年开始蓬勃兴起,信创的浪潮正席卷整个信息与通信技…...

【Linux】线程封装与互斥(万字)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 C多线程的用法 对原生线程进行一次封装 理解pthread线程 Linux线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 操作共享变量会有问题的售票…...

5分钟教你部署MySQL8.0环境
此方法基于Windows操作系统! 一、在MySQL官网单击downloads(下载)MySQLhttps://www.mysql.com/cn/ 选择在Windows操作系统下载 二、选择合适的版本 推荐下载第二种,安装时离线安装即可 三、安装MySQL8.0 1、找到MySQL下载完成…...

LLM应用:传统NLP任务
LLM出来以后,知乎上就出现了“传统NLP已死”的言论,但是传统NLP真的就被扔进历史的垃圾桶了吗? 其实,尽管LLM具有出色的通用能力,但仍然无法有效应对低资源领域的自然语言处理任务,如小语种翻译。为了更好地…...
基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建Kafka大数据运算环境---任务11:基础环境准备
任务描述 任务主要是安装配置基础环境,主要内容包括: 1、安装java Kafka和ZooKeeper都需要安装Java环境,推荐至少Java8及以上版本 2、安装ZooKeeper ZooKeeper是Kafka集群的必要组件 3、安装kafka Kafka版本包括使用的scala语言版本和kafka版…...
Golang中swtich中如何强制执行下一个代码块
switch 语句中的 case 代码块会默认带上 break,但可以使用 fallthrough 来强制执行下一个 case 代码块。 package mainimport ("fmt" )func main() {isSpace : func(char byte) bool {switch char {case : // 空格符会直接 break,返回 false…...
读书笔记-Java并发编程的艺术-第4章(Java并发编程基础)-第2节(启动和终止线程)
文章目录 4.2 启动和终止线程4.2.1 构造线程4.2.2 启动线程4.2.3 理解中断4.2.4 过期的suspend()、resume()和stop()4.2.5 安全地终止线程 4.2 启动和终止线程 在前面章节的示例中通过调用线程的start()方法进行启动,随着run()方法的执行完毕,线程也随之…...
通俗大白话理解Docker
什么是Docker Docker本质上是一种容器化技术,用于将应用程序及其所有依赖打包到一个标准化的单元中。这些单元(容器)可以在任何运行Docker的机器上运行。每个容器是相互隔离的,具有自己的文件系统、网络和进程空间。 以下是大白话…...
题解:CF1981C(Turtle and an Incomplete Sequence)
题解:CF1981C(Turtle and an Incomplete Sequence) Part 1:题意理解 地址链接:CF、洛谷。题面翻译:给定一个长度为 n n n 的序列 a a a,其中有一些元素未知,用 − 1 -1 −1 表示…...

Swift 中强大的 Key Paths(键路径)机制趣谈(上)
概览 小伙伴们可能不知道:在 Swift 语言中隐藏着大量看似“其貌不扬”实则却让秃头码农们“高世骇俗”,堪称卧虎藏龙的各种秘技。 其中,有一枚“不起眼”的小家伙称之为键路径(Key Paths)。如若将其善加利用ÿ…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...