C++模板——(3)类模板
归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
勤奋,机会,乐观是成功的三要素!
一起加油!
目录
编辑
一、类模板的定义和使用:
💦例如,声明两个类,分别用来比较整数和浮点数的大小。
🔑说明:
💦例:编写一个类模板,比较两个整数、浮点数和字符数据的大小。
🔑说明:
二、总结:
三、共勉:
一、类模板的定义和使用:
昨天介绍了函数模板,建立了一个通用函数,将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,用来简化程序设计。对于类的声明,也存在同样的问题。如几个类的逻辑功能相同,但数据类型不同,却要重复性的写很多代码。
💦例如,声明两个类,分别用来比较整数和浮点数的大小。
class Compare_int{private:int x,y;public:Compare_int(int a,int b){x=a;y=b;}int max(int a,int b){return a>b?a:b } int min(int a,int b){return a<b?a:b }
};
class Compare_float{private:float x,y;public:Compare_float(float a,float b){x=a;y=b;}float max(float a,float b){return a>b?a:b;}float min(float a,float b){return a<b?a:b;}
};
这两个类的声明的类型不同,但逻辑功能非常相似,有很强的重复性。我们可以运用函数横板的思路,为类也声明一个通用的类模板,使得实例化类中的某些数据成员、某些成员函数的参数或者返回值,能取任意的数据类型。
类模板的一般定义格式如下:
template <class T>
class 类名
{
};
🔑说明:
- (1)template是定义类模板的关键字,总是放在模板定义和声明的最前面。
- (2)<classT>必须用尖括号<>括起来,其中T为类型参数,它实际上是一个虚拟的类型名,当使用类模板时,T被替换为某种实际的数据类型(例如int,char,float 等)从而实现类多用。T也可以用其他合法的标识符替换。
- (3)类的定义方式与之前讲到的类的定义类似。
- (4)类模板是对一组类的抽象,某一个类是对类模板的实例化。
在声明了一个类模板后,如何使用它,如何使它变成一个实际的类,又如何生成一个具体的对象?
一般形式为:
类模板名<实际类型名> 对象名(参数表);
下面通过具体的例子说明类模板的定义和使用方法.
💦例:编写一个类模板,比较两个整数、浮点数和字符数据的大小。
#include<iostream>
using namespace std;
template <class T>
class Compare{private:T x,y;public:Compare(T a,T b){x=a;y=b;}T max();T min();
};
template <class T>
T Compare<T>::max()
{return x>y?x:y;
}
template <class T>
T Compare<T>::min()
{return x<y?x:y;
}
int main()
{Compare<int> cmpi(4,9);cout<<"两个整数的最大值:"<<cmpi.max()<<endl; cout<<"两个整数的最小值:"<<cmpi.min()<<endl; Compare<float> cmpf(3.93,7.78);cout<<"两个小数的最大值:"<<cmpf.max()<<endl; cout<<"两个小数的最小值:"<<cmpf.min()<<endl; Compare<char> cmpc('k','q');cout<<"两个字符的最大值:"<<cmpc.max()<<endl;cout<<"两个字符的最小值:"<<cmpc.min()<<endl;return 0;
}
🔑说明:
该程序定义了一个类模板 Compare<T>,其模板类型参数为 T。在该类模板中,构造函数的两个形参 a、b,两个私有的数据成员 x、y,以及两个成员函数 max()和 min()的返回类型,都是用模版类型参数T声明的变量。
该程序的主函数中生成了三个模板类,并生成了三个对象,其语句分别为:Compare<int>cmpi(4,9);(此时T被指定的类型为int,类对象名为cmpi。)Compare<float>cmpf(3.93,7.78);(此时T被指定的类型为float,类对象名为cmpf。)Compare<char>cmpc('k','p')(此时T被指定的类型为char,类对象名为cmpc。)总结定义类模板时应注意以下几点:
(1)声明类模板时,要在类的前面加一行语句:
template<class 虚拟类型参数>
(2)用类模板定义对象时用以下形式:
类模板名<实际类型名> 对象名;
类模板名<实际类型名> 对象名(参数表);
(3)如果在类模板外定义成员函数,应写成类模板形式 :
template<class 虚拟类型参数>
函数类型类模板名<虚拟类型参数>::成员函数名(函数形参表){......}
二、总结:
- template是定义类模板的关键字,总是放在模板定义和声明的最前面。
- <classT>必须用尖括号<>括起来,其中T为类型参数,它实际上是一个虚拟的类型名。
- 类模板是对一组类的抽象,某一个类是对类模板的实例化。
三、共勉:
以上就是我对C++模板——(3)类模板的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++模板的理解,请持续关注我哦!!!
相关文章:

C++模板——(3)类模板
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 勤奋,机会,乐观…...
深度学习中Epoch和Batch Size的关系
在深度学习中,Epoch(周期)和 Batch Size(批大小)是训练神经网络时经常使用的两个重要的超参数。它们之间的关系是通过以下方式连接的: Epoch(周期): Epoch 表示整个训练…...

Python采集微博评论做词云图
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 第三方模块使用: import requests >>> pip install requests import wordcloud >>> pip install wordclou…...

一文详解VScode 的远程开发
VS code登录服务器后进行编码和调试,VS code上的所有功能都可以使用,和在本地开发基本无区别。 一、配置免密远程登录 因为是要远程登录,那么需要通过使用ssh进行密钥对登录,这样每次登录服务器就可以不用输入密码了。 先来一句官…...

捕捉“五彩斑斓的黑”:锗基短波红外相机的多种成像应用
红外处于人眼可观察范围以外,为我们了解未知领域提供了新的途径。红外又可以根据波段范围,分为短波红外、中波红外与长波红外。较短的SWIR波长——大约900nm-1700nm——与可见光范围内的光子表现相似。虽然在SWIR中目标的光谱含量不同,但所产…...

解读 Sobit v2:铭文资产跨链更注重安全、易用性
铭文市场的发展正在从早期的“无序”进入到“有序”阶段,我们看到从 12 月份以来,比特币生态内的多个应用纷纷宣布获得融资。这表明,目前仍旧有大量的资金有意向铭文领域,同样铭文赛道新一轮浪潮或许正在酝酿。 另一方面ÿ…...

[开源]万界星空开源MES系统,支持低代码大屏设计
一、开源系统概述: 万界星空科技免费MES、开源MES、商业开源MES、商业开源低代码MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、精美的数据大屏。 二、开源协议: 使…...
开源软件运维安全防护的六个手段
开源,顾名思义,即开放软件源代码。代码贡献者可将自己编写的程序提交到开源社区的公开平台上,其他代码开发者如有类似的功能需求可以不必再自己动脑动手编写代码,而是直接集成、修改或应用贡献者公开的代码。 开源软件是通过特定…...

开启Android学习之旅-5-Activity全屏
Android 两种方式设置全屏: 1. 第一行代码中的方法 通过 getWindow().getDecorView()方法拿到当前Activity的DecorView,再调用 setSystemUiVisibility() 方法来改变系统UI的显示,这里传入了 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 和 View.SYSTEM_UI_…...
运行时类型信息 typeid、type_info...(C++)
4.5 运行时类型信息4.5.1 typeid和type_info4.5.2 dynamic_cast 4.5 运行时类型信息 运行时类型信息(Run-time Type Information,RTTI)提供了在程序运行时刻确定对象类型的方法,是面向对象程序语言为解决多态问题而引入的一种语言特性。由于…...
2023-12-02 青少年软件编程(C语言)等级考试试卷(七级)解析
2023-12-02 青少年软件编程(C语言)等级考试试卷(七级)解析 一、编程题(共4题,共100分)T1. 迷宫 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense…...

计算机网络-以太网交换基础
一、网络设备的演变 最初的网络在两台设备间使用传输介质如网线等进行连接就可以进行通信。但是随着数据的传输需求,多个设备需要进行数据通信时就需要另外的设备进行网络互联,并且随着网络传输的需求不断更新升级。从一开始的两台设备互联到企业部门内部…...
C++系列十六:枚举
枚举 一、C枚举基础 在C中,枚举(Enumeration)是一种用户定义的数据类型,它包含一组整数值,每个值都与一个标识符关联。通过使用枚举,我们可以使代码更加清晰易懂,避免使用魔术数字或字符串。 …...
flask web学习之flask与http(四)
文章目录 一、重定向进阶功能1.1 重定向回上一个页面1.2 对URL进行安全验证 二、使用Ajax技术发送异步请求2.1 什么是Ajax2.2使用jQuery发送Ajax请求 三、服务器推送四、web安全规范1. 注入攻击2. XSS攻击3. CSRF攻击 一、重定向进阶功能 1.1 重定向回上一个页面 有时候&#…...
电子签章Java后端与前端交互签名位置计算
电子签章过程中存在着在网页上对签署文件进行预览、指定签署位置、文件签署等操作,由于图片在浏览器上的兼容性和友好性优于PDF文件,所以一般在网页上进行电子签章时,会先将PDF文件转换成图片,展示给用户。用户在页面上确定好签署…...

为什么选择嬴图?
图数据库、图计算、图中台都是用图论的方式去构造实体间的关联关系,实体用顶点来表达,而实体间的关系用边来表达。图数据库的这种简洁、自由、高维但100%还原世界的数据建模的方式让实体间的关联关系的计算比SQL类的数据库高效成千上万倍。 图࿱…...
Python学习之路-编码风格
Python学习之路-编码风格 设计哲学 Python的设计哲学是“优雅”、“明确”、“简单”。它的重要准则被称为“Python之禅”。Python之禅又名PEP 20,在Python解释器内运行import this可以获得完整的列表,下面是我的翻译与解读: 提姆彼得斯&a…...

权威认可!甄知科技猪齿鱼产品荣获信创产品评估证书
近日,依据《信息技术应用创新产品评估规范 第1部分:应用软件》(T/SSIA 2001-2022),经过严格评估,甄知科技旗下自主研发的猪齿鱼数智化开发管理平台 V2.0.0,通过信创测试认证,获得上海…...
9. 回文数(Java)
题目描述: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 …...

Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)
Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对) 1、openssl生成RSA公私钥对 1.1、生成RSA公私钥对命令 [rootloaclhost ~]# openssl OpenSSL> genrsa -out rsa_private_key.pem 1024 Generating RSA private key, 1024 bit long modulus .. ...…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...