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

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)类模板

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 勤奋&#xff0c;机会&#xff0c;乐观…...

深度学习中Epoch和Batch Size的关系

在深度学习中&#xff0c;Epoch&#xff08;周期&#xff09;和 Batch Size&#xff08;批大小&#xff09;是训练神经网络时经常使用的两个重要的超参数。它们之间的关系是通过以下方式连接的&#xff1a; Epoch&#xff08;周期&#xff09;&#xff1a; Epoch 表示整个训练…...

Python采集微博评论做词云图

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

一文详解VScode 的远程开发

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

捕捉“五彩斑斓的黑”:锗基短波红外相机的多种成像应用

红外处于人眼可观察范围以外&#xff0c;为我们了解未知领域提供了新的途径。红外又可以根据波段范围&#xff0c;分为短波红外、中波红外与长波红外。较短的SWIR波长——大约900nm-1700nm——与可见光范围内的光子表现相似。虽然在SWIR中目标的光谱含量不同&#xff0c;但所产…...

解读 Sobit v2:铭文资产跨链更注重安全、易用性

铭文市场的发展正在从早期的“无序”进入到“有序”阶段&#xff0c;我们看到从 12 月份以来&#xff0c;比特币生态内的多个应用纷纷宣布获得融资。这表明&#xff0c;目前仍旧有大量的资金有意向铭文领域&#xff0c;同样铭文赛道新一轮浪潮或许正在酝酿。 另一方面&#xff…...

[开源]万界星空开源MES系统,支持低代码大屏设计

一、开源系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、商业开源低代码MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、精美的数据大屏。 二、开源协议&#xff1a; 使…...

开源软件运维安全防护的六个手段

开源&#xff0c;顾名思义&#xff0c;即开放软件源代码。代码贡献者可将自己编写的程序提交到开源社区的公开平台上&#xff0c;其他代码开发者如有类似的功能需求可以不必再自己动脑动手编写代码&#xff0c;而是直接集成、修改或应用贡献者公开的代码。 开源软件是通过特定…...

开启Android学习之旅-5-Activity全屏

Android 两种方式设置全屏&#xff1a; 1. 第一行代码中的方法 通过 getWindow().getDecorView()方法拿到当前Activity的DecorView,再调用 setSystemUiVisibility() 方法来改变系统UI的显示&#xff0c;这里传入了 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 运行时类型信息 运行时类型信息&#xff08;Run-time Type Information,RTTI&#xff09;提供了在程序运行时刻确定对象类型的方法&#xff0c;是面向对象程序语言为解决多态问题而引入的一种语言特性。由于…...

2023-12-02 青少年软件编程(C语言)等级考试试卷(七级)解析

2023-12-02 青少年软件编程(C语言)等级考试试卷(七级)解析 一、编程题(共4题,共100分)T1. 迷宫 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense…...

计算机网络-以太网交换基础

一、网络设备的演变 最初的网络在两台设备间使用传输介质如网线等进行连接就可以进行通信。但是随着数据的传输需求&#xff0c;多个设备需要进行数据通信时就需要另外的设备进行网络互联&#xff0c;并且随着网络传输的需求不断更新升级。从一开始的两台设备互联到企业部门内部…...

C++系列十六:枚举

枚举 一、C枚举基础 在C中&#xff0c;枚举&#xff08;Enumeration&#xff09;是一种用户定义的数据类型&#xff0c;它包含一组整数值&#xff0c;每个值都与一个标识符关联。通过使用枚举&#xff0c;我们可以使代码更加清晰易懂&#xff0c;避免使用魔术数字或字符串。 …...

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后端与前端交互签名位置计算

电子签章过程中存在着在网页上对签署文件进行预览、指定签署位置、文件签署等操作&#xff0c;由于图片在浏览器上的兼容性和友好性优于PDF文件&#xff0c;所以一般在网页上进行电子签章时&#xff0c;会先将PDF文件转换成图片&#xff0c;展示给用户。用户在页面上确定好签署…...

为什么选择嬴图?

图数据库、图计算、图中台都是用图论的方式去构造实体间的关联关系&#xff0c;实体用顶点来表达&#xff0c;而实体间的关系用边来表达。图数据库的这种简洁、自由、高维但100%还原世界的数据建模的方式让实体间的关联关系的计算比SQL类的数据库高效成千上万倍。 图&#xff1…...

Python学习之路-编码风格

Python学习之路-编码风格 设计哲学 Python的设计哲学是“优雅”、“明确”、“简单”。它的重要准则被称为“Python之禅”。Python之禅又名PEP 20&#xff0c;在Python解释器内运行import this可以获得完整的列表&#xff0c;下面是我的翻译与解读&#xff1a; 提姆彼得斯&a…...

权威认可!甄知科技猪齿鱼产品荣获信创产品评估证书

近日&#xff0c;依据《信息技术应用创新产品评估规范 第1部分&#xff1a;应用软件》&#xff08;T/SSIA 2001-2022&#xff09;&#xff0c;经过严格评估&#xff0c;甄知科技旗下自主研发的猪齿鱼数智化开发管理平台 V2.0.0&#xff0c;通过信创测试认证&#xff0c;获得上海…...

9. 回文数(Java)

题目描述&#xff1a; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 …...

Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)

Python(30)&#xff1a;非对称加密算法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 .. ...…...

Excel MCP Server终极指南:让AI成为你的Excel自动化助手

Excel MCP Server终极指南&#xff1a;让AI成为你的Excel自动化助手 【免费下载链接】excel-mcp-server A Model Context Protocol server for Excel file manipulation 项目地址: https://gitcode.com/gh_mirrors/ex/excel-mcp-server 你是否厌倦了重复的Excel操作&…...

YimMenu终极配置指南:从零开始掌握GTA V高级菜单工具

YimMenu终极配置指南&#xff1a;从零开始掌握GTA V高级菜单工具 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…...

完整实战指南:使用N_m3u8DL-RE高效解决流媒体下载难题

完整实战指南&#xff1a;使用N_m3u8DL-RE高效解决流媒体下载难题 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE …...

通达信数据解析终极指南:mootdx让金融数据获取变得如此简单

通达信数据解析终极指南&#xff1a;mootdx让金融数据获取变得如此简单 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在金融数据分析和量化交易的世界里&#xff0c;获取准确、完整的市场数据是…...

终极指南:3步掌握yfinance金融数据获取与智能修复实战

终极指南&#xff1a;3步掌握yfinance金融数据获取与智能修复实战 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance yfinance是一个强大的Python库&#xff0c;能够从Yahoo! Finan…...

构建动态技能图谱:从数据模型到自动化可视化的完整实践

1. 项目概述&#xff1a;一个技能图谱的诞生最近在GitHub上看到一个挺有意思的项目&#xff0c;叫dortort/skills。乍一看&#xff0c;这只是一个个人仓库&#xff0c;但点进去你会发现&#xff0c;它远不止是一个简单的代码集合。它更像是一张动态的、可视化的个人技能地图&am…...

Google Labs Jules Awesome List:构建与维护高质量开发者资源清单指南

1. 项目概述&#xff1a;一份面向开发者的“Awesome List”清单在开源社区和开发者圈子里&#xff0c;有一个约定俗成的传统&#xff1a;当某个技术领域或工具生态变得足够庞大和复杂时&#xff0c;总会有热心的贡献者站出来&#xff0c;整理一份名为“Awesome List”的清单。这…...

DLP/SLA光固化3D打印技术解析与Ember打印机实战指南

1. DLP/SLA 3D打印技术深度解析&#xff1a;从光与树脂的对话说起如果你是从FDM&#xff08;熔丝制造&#xff09;打印转向树脂打印的&#xff0c;那感觉就像从开手动挡卡车换到了开精密数控机床。DLP&#xff08;数字光处理&#xff09;和SLA&#xff08;立体光刻&#xff09;…...

从零打造会“看”的电子眼:Teensy与OLED的嵌入式图形与传感器实践

1. 项目概述&#xff1a;打造一个会“看”的电子生命体几年前&#xff0c;我第一次在创客社区看到“Uncanny Eyes”项目时就被深深吸引了。一个微小的OLED屏幕&#xff0c;在代码驱动下&#xff0c;竟然能呈现出如此逼真、灵动的眼球运动&#xff0c;那种介于生命与机械之间的诡…...

基于Circuit Playground Express与NeoPixel的四季交互灯光装置设计与实现

1. 项目概述与核心思路几年前&#xff0c;我在一个艺术展上看到一组悬挂在枯树枝上的玻璃瓶&#xff0c;里面装着会呼吸般变幻光线的LED灯&#xff0c;那种静谧又灵动的美感让我念念不忘。作为一个喜欢把代码和电路“藏”进生活场景里的硬件爱好者&#xff0c;我一直在琢磨如何…...