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

C++泛编程(3)

类模板基础

  • 1.类模板的基本概念
  • 2.类模板的分文件编写
  • 3.类模板的嵌套 (未完待续...)

在往节内容中,我们详细介绍了函数模板,这节开始我们就来聊一聊类模板。C++中,类的细节远比函数多,所以这个专题也会更复杂。

1.类模板的基本概念

和函数模板一样,类也可以有处理不同类型变量的能力。定义一个类模板需要使用的语句与定义函数模板类似:

template <class T1, class T2>

再次强调,尽管typename关键字和class关键字都可以定义通用变量,但通常函数中的通用变量使用typename定义,类中则使用class定义。定义后的通用变量名可以出现在类中的任何位置,比如我们写一个简单的类:

template <class T1, class T2>
class AA
{
public:T1 m_a;T2 m_b;AA(){} // 不负责任的构造函数AA(T1 a, T2 b):m_a(a),m_b(b){} T1 get_a() // 打印并返回a的值{cout << m_a << endl;return m_a;}T2 get_b() // 打印并返回b的值{cout << m_b << endl;return m_b;}
};

定义一个类模板与定义函数模板类似,但调用方法有所不同。因为C++不能自动判定传参的类型,所以我们调用时必须指定T1和T2的具体类型:

int main()
{AA<int, double> a;a = { 20,3.3 };a.get_a();a.get_b();return 0;}// 输出为:20//        3.3

此外,我们还可以给通用类行指定默认类型,类似于python中的默认参数。将定义AA类通用参数的代码换成:

template <class T1, class T2=int>

这样在调用函类的话就可以这样写:

int main()
{AA<int> a(20,3.3);AA <int,double> b (20,3.3);a.get_a();a.get_b();b.get_a();b.get_b();return 0;
}
// 输出为:20
//		  3
//		  20
//	 	  3.3

从这个例子中也可以看出,这个默认值也是可以手动修改的。C++11以上标准的函数模板实际上也接受这种制定通用类型的默认值操作,但实际意义不大。
我们也可以用new关键字来创建模板类对象:

int main()
{AA<int,double> *a=new AA<int>(20,3.3);a->get_a();a->get_b();delete a;return 0;
}

需要注意,使用模板类的话类名就不是AA了,而是AA<int,double>。

2.类模板的分文件编写

与函数模板一样,类模板也是在用到的时候才会被创建成具体函数。如果需要将类的声明和定义分开,那么同函数模板一样,这个声明通用变量的语句也要跟着定义。如果想要份文件编写,类模板也要整体放倒头文件中:
在这里插入图片描述
这个例子中,我们有一个Student具体类和AA类模板,其中类模板的属性声明和定义是分开的,请大家仔细观察一下。
可能有小伙伴好奇这样的结果,其实原因不难理解,C++是分文件进行编译的,所以头文件和源文件乍看之下都没有错,编译器也是可以正常通过的。但是对于具体函数和具体类而言,放在源文件中的函数定义会在编译过程中被创建成具体内容与头文件形成连接。而模板不会,它只会在被调用到的时候才能生具体函数,因此编译的过程中模板函数和类模板的方法并不会与头文件形成有效的链接,所以调用也就会出错了。解决这个问题当然就是不让编译器去源文件中形成连接,而是在头文件中就放好需要的内容。

3.类模板的嵌套 (未完待续…)

在开始这部分的讲述之前,我们先看一下使用类模板实现的两种数据结构——数组和栈

相关文章:

C++泛编程(3)

类模板基础 1.类模板的基本概念2.类模板的分文件编写3.类模板的嵌套 &#xff08;未完待续...&#xff09; 在往节内容中&#xff0c;我们详细介绍了函数模板&#xff0c;这节开始我们就来聊一聊类模板。C中&#xff0c;类的细节远比函数多&#xff0c;所以这个专题也会更复杂。…...

python基于django的公交线路查询系统mf383

1.个人信息的管理&#xff1a;对用户名&#xff0c;密码的增加、删除等 2.线路信息的管理&#xff1a;对线路的增加、修改、删除等 3.站点信息的管理&#xff1a;对站点的增加、修改、删除等 4.车次信息的管理&#xff1a;对车次的增加、修改、删除等 5.线路查询、站点查询 …...

ElementUI 组件:Container 布局容器实例

ElementUI安装与使用指南 Container 布局容器 点击下载learnelementuispringboot项目源码 效果图 el-container-example.vue&#xff08;Container 布局容器实例&#xff09;页面效果图 项目里el-container-example.vue代码 <script> export default {name: el_cont…...

【数据结构 09】哈希

哈希算法&#xff1a;哈希也叫散列、映射&#xff0c;将任意长度的输入通过散列运算转化为固定长度的输出&#xff0c;该输出就是哈希值&#xff08;散列值&#xff09;。 哈希映射是一种压缩映射&#xff0c;通常情况下&#xff0c;散列值的空间远小于输入值的空间。 哈希运…...

理解和管理Linux文件权限

理解和管理Linux文件权限 文件权限的基本概念和表示方式 文件权限管理在Linux系统中是非常重要的&#xff0c;它决定了谁可以访问、读取、写入或执行文件。文件权限以及所有者、所属组等属性可以通过 ls -l 命令查看。 在 ls -l 命令的输出中&#xff0c;文件的权限通常表示…...

爬虫(二)

1.同步获取短视频 1.只要播放地址对Json数据解析&#xff0c;先把列表找出&#xff1a; 2.只想要所有的播放地址&#xff0c;通过列表表达式循环遍历这个列表拿到每个对象&#xff0c;再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放…...

Flink实战四_TableAPISQL

接上文&#xff1a;Flink实战三_时间语义 1、Table API和SQL是什么&#xff1f; 接下来理解下Flink的整个客户端API体系&#xff0c;Flink为流式/批量处理应用程序提供了不同级别的抽象&#xff1a; 这四层API是一个依次向上支撑的关系。 Flink API 最底层的抽象就是有状态实…...

海外云手机开辟企业跨境电商新道路

近几年&#xff0c;海外云手机为跨境电商、海外媒体引流、游戏行业等互联网领域注入了蓬勃活力。对于国内跨境电商而言&#xff0c;在亚马逊及其他平台上&#xff0c;短视频引流和社交电商营销成为最为有效的流量来源。如何通过海外云手机的助力&#xff0c;在新兴社交平台为企…...

【51单片机系列】中断优先级介绍及使用

文章来源&#xff1a;《51单片机原理及应用&#xff08;第3版&#xff09;》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。 当CPU处理低优先级中断&#xff0c;又发生更高级中断时&#xff0c;此时中断处理过程如下图所示。 一个正在执行的低优先级中断服…...

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…...

Unity项目从built-in升级到URP(包含早期版本和2023版本)

unity不同版本的升级URP的方式不一样&#xff0c;但是大体流程是相似的 首先是加载URP包 Windows -> package manager,在unity registry中找到Universal RP 2023版本&#xff1a; 更早的版本&#xff1a; 创建URP资源和渲染器​​ 有些版本在加载时会自动创建&#…...

2月4号作业

编写程序实现二叉树的创建&#xff0c;三种遍历自己销毁 #include <myhead.h>#define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define OK 1 #define ERROR 0#define INIT_SIZE 20 #define INCREMENT_SIZE 5typedef int Status; typedef int TElemType; //存储结构…...

瑞_23种设计模式_建造者模式

文章目录 1 建造者模式&#xff08;Builder Pattern&#xff09;1.1 介绍1.2 概述1.3 创作者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 模式拓展 ★★★4.1 重构前4.2 重构后 5 总结5.1 建造者模式优缺点5.2 建造者模式使用场景5.3 建造者模式 …...

GA/T 1707-2019 防爆安全门检测

防爆安全门是指能抵抗爆炸冲击波作用的特种防护门&#xff0c;根据防爆门的防爆性能的不同&#xff0c;分为非接触爆炸防爆门和防接触爆炸防爆门&#xff0c;根据防爆能力的不同&#xff0c;分为不同等级。 GA/T 1707-2019 防爆安全门检测项目 测试项目 测试标准 外观质量 …...

k8s学习-数据管理

在Docker中我们知道&#xff0c;要想实现数据的持久化&#xff08;所谓Docker的数据持久化即数据不随着Container的结束而结束&#xff09;&#xff0c;需要将数据从宿主机挂载到容器中&#xff0c;常用的手段就是Volume数据卷。在K8S中&#xff0c;也提供了存储模型Volume&…...

java hutool工具类实现将数据下载到excel

通过hutool工具类&#xff0c;对于excel的操作变得非常简单&#xff0c;上篇介绍的是excel的上传&#xff0c;对excel的操作&#xff0c;核心代码只有一行。本篇的excel的下载&#xff0c;核心数据也不超过两行&#xff0c;简洁方便&#xff0c;特别适合当下的低代码操作。 下载…...

【C/Python】Gtk部件ListStore的使用

一、C语言 在GTK中&#xff0c;Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型&#xff0c;用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例&#xff0c;该示例创建了一个列表&#xff0c;并在图形界面中显示&#xff1a; …...

Swift 入门之自定义类型的模式匹配(Pattern Matching)

概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样&#xff0c;在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中&#xff0c;模式匹配&#xff08;Pattern …...

MySQL-----DML基础操作

DML语句 DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增删改操作。 ▶ 添加数据(INSERT) 【语法】 1. 给指定字段添加数据 INSERTO 表名 (字段名1&#xff0c;字段名2,...) VALUES (值1&#xff0c;值2,...); 2.给全…...

提前祝大家新年好!来看看社区 2023 都得了哪些奖吧

大噶好&#xff01;转眼马上就是“龙”历新年啦&#xff0c;不知道大家这周的工作热情怎么样呢&#xff1f;小陈的心已经在殷切期盼回家过年了&#xff5e; RTE 开发者社区预祝诸位&#xff1a; 2024 年 &#x1f432;龙年添财气&#xff0c;万事皆胜意&#xff01; 回顾过去…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...