专题:一看就会的C++类模板讲解 (1)
目录
一.类模板的作用
二.类模板的定义:
三.类模板的声明格式:
四.类模板对象
五.再举一个例子
一.类模板的作用
面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样,但是仅仅因为数据类型的不同,导致想要实现同一目标,我们就需要写好多个只有数据类型不同、其他内容都相同的类。这无疑是费时耗力、臃肿繁琐的。
在C++中,为了解决这样的问题,引入了类模板的概念。就像泥塑的胚子一样,每次注入石膏陶土,最后都会按照要求变成外形相同的泥塑。类模板就是这样的一个胚子,数据类型就是注入的原料。
因此,对于数据的处理方式相同、仅因为数据类型不同而定义不同的类时,我们使用类模板来简化我们的代码。
二.类模板的定义:
将数据类型抽象出来而形成的操作集。
类模板使用户可以为类定义一种模式,使得类中的某些数据成员、成员函数的参数和返回值能去的任意的数据类型。
三.类模板的声明格式:
template <参数>// template 定义类模板的关键字
//模板以关键字template和一个形参表开头
class 类名
{
……;
};
举个例子:
下面代码实现的是输入两个数,寻找最大数和最小数
#include <iostream>
using namespace std;
template <class temp>class compare
{
public:compare(temp a,temp b){this->x = a;this->y = b;}temp max(){ return x > y ? x : y; }temp min() { return x > y ? y : x; }
private:temp x; temp y;
};
int main()
{/*write your code here*/return 0;
}
将函数放在类体外定义:
一般格式为:
template <模板参数>
class 类名
{
……;
}
template <模板参数>
inline 返回值类型 类名 <模板类型参数>::成员函数名(形参表)
{函数体}
重点注意:在类体外面定义成员函数时,必须用template重写类模板声明!!!
不重新声明就会报错:

正确代码:
#include <iostream>
using namespace std;
template <class temp>class compare
{
public:compare(temp a, temp b){this->x = a;this->y = b;}temp max();temp min();
private:temp x; temp y;
};template <class temp>
inline temp compare<temp>::max()//不重新声明就会报错
{return x > y ? x : y;
}template <class temp>
inline temp compare<temp>::min()//不重新声明就会报错
{return x > y ? y : x;
}int main()
{/*write your code here*/return 0;
}
结构图:

四.类模板对象
类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象之后才能使用。
初始化类模板时,只要传给它指定的数据类型(如int float double等),编译器就用指定的类型来代替末班参数产生相应的模板类。
用类模板定义对象的一般格式:
类名<模板实例化参数类型>对象名(构造函数实参列表)
或者:
类名<模板实例化参数类型>对象名
#include <iostream>
using namespace std;
template <class temp>class compare
{
public:compare(temp a, temp b){this->x = a;this->y = b;}temp max();temp min();
private:temp x; temp y;
};template <class temp>
inline temp compare<temp>::max()//不重新声明就会报错
{return x > y ? x : y;
}template <class temp>
inline temp compare<temp>::min()//不重新声明就会报错
{return x > y ? y : x;
}int main()
{compare<int>INT(2, 3);cout << INT.max() << endl;//3cout << INT.min() << endl;//2compare<double>DOUBLE(2.2, 3.3);cout << DOUBLE.max() << endl;//3.3cout << DOUBLE.min() << endl;//2.2return 0;
}
五.再举一个例子
本代码实现的是坐标的输入与输出。
#include <iostream>
using namespace std;
template<class temp>
class point
{
private:temp x;temp y;
public:point (temp a=0,temp b=0):x(a),y(b){}void setxy(temp, temp);void showxy(){cout << x << "," << y << endl;}temp getx() { return x; }temp gety() {return y; }
};
template<class temp>
inline void point<temp>::setxy(temp a, temp b)
{this->x = a;this->y = b;
}
int main()
{point<int>a(3, 4);a.showxy();point<float>b(1.2, 3.4);b.showxy();return 0;
}
相关文章:
专题:一看就会的C++类模板讲解 (1)
目录 一.类模板的作用 二.类模板的定义: 三.类模板的声明格式: 四.类模板对象 五.再举一个例子 一.类模板的作用 面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样…...
什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化
什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化问题什么是“奥卡姆剃刀”?如何使用“奥卡姆剃刀”解决问题复杂问题简单化“汉隆剃刀”小结问题 假设你在夜空中看到一颗闪闪发光的「不明飞行物」,你认为这会是什么呢…...
角谷定理(递归)
已知有角谷定理: 输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程ÿ…...
数学小课堂:微积分复盘(高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。)
文章目录 引言I 复盘1.1 概念和表述1.2 现实与虚构1.3 有穷和无穷1.4 静态和动态1.5 直觉和逻辑II 通过数学逻辑,理解人生。2.1 精明与聪明2.2 朋友和理性的对手2.3 攒钱和赚钱2.4 荣誉和财富引言 高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。 I 复盘 1.…...
JAVA线程池原理详解一
JAVA线程池原理详解一 一. 线程池的优点 线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。 二…...
Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送
技术背景随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。技术实现Unity平台下的RTMP推流、RTMP、RTSP播放前几年已经覆盖了Windows、Linux、Android、i…...
LSB 题解
今天来刷一道Misc的题目,LSB原理进行图片隐写 LSB原理 LSB是一种利用人类视觉的局限性设计的幻术 PNG和BMP图片中的图像像素一般是由RGB(RED红 GREEN绿 BLUE蓝)三原色组成 记住,JPG图片是不适合使用LSB隐写的,JPG图片对像数进行了有损压缩…...
离线部署docker与镜像
离线部署docker与镜像 1.离线部署docker 1).在docker官网上下载,合适的安装文件 本次使用的是“docker-20.10.9.tgz ” 下载地址:https://download.docker.com/linux/static/stable/x86_64/ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下…...
Linux文件系统介绍(上)
使用 Linux 系统时,需要作出的决策之一就是为存储设备选用什么文件系统。大多数 Linux 发行版在安装时会非常贴心地提供默认的文件系统,大多数入门级用户想都不想就用了默认的那个。 使用默认文件系统未必就不好,但了解一下可用的选择有时也会…...
创建SpringBoot注意事项
作为一个java小白,你是否因为创建SpringBoot项目那些莫名其妙的错误搞得头皮发麻。不要慌张,这篇文章能帮你解决90%的问题【持续更新…】 本文结合创建SpringBoot项目的完整过程来讲 在idea中新建项目 虽然SpringBoot项目是由maven内核组成的࿰…...
2023年全国最新二级建造师精选真题及答案9
百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.关于施工合同违约赔偿损失范围的说法,正确的是()。 A.…...
解决MySQL的 Row size too large (> 8126).
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到…...
最优传输问题和Sinkhorn
最优传输问题 假设有M堆土,每堆土的大小是ama_mam,有N个坑,每个坑的大小是bnb_nbn,把单位土从土堆m运送到坑n的代价是c(m,n)c(m,n)c(m,n),如何找到一种运输方法填满坑,并且代价最小,这就是…...
Netty核心组件EventLoop源码解析
源码解析目标 分析最核心组件EventLoop在Netty运行过程中所参与的事情,以及具体实现 源码解析 依然用netty包example下Echo目录下的案例代码,单我们写一个NettyServer时候,第一句话就是 EventLoopGroup bossGroup new NioEventLoopGroup(…...
排障命令-汇总
目录 日志查询 1. grep 2. zgrep cpu 1. top 内存 1. free tcp相关 1. netstat 2. ulimit 3. lsof jvm常用 1. jps 2. jinfo 3. jstack 4. jmap 5. jstat 进制转换 1. 十进制转16进制 日志查询 1. grep 定义:(global regular expression) 命令用于查…...
python+pytest接口自动化(4)-requests发送get请求
python中用于请求http接口的有自带的urllib和第三方库requests,但 urllib 写法稍微有点繁琐,所以在进行接口自动化测试过程中,一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。requests库简介requests 库中…...
开源电子书工具Calibre 6.3 发布
Calibre 开源项目是 Calibre 官方出的电子书管理工具。它可以查看,转换,编辑和分类所有主流格式的电子书。Calibre 是个跨平台软件,可以在 Linux、Windows 和 macOS 上运行。Calibre 6.3 正式发布,此次更新内容如下:新…...
C++ STL:适配器 Adapter
文章目录1、容器适配器1.1、stack1.2、queue1.3、priority_queue2、迭代器适配器2.1、插入迭代器2.2、反向迭代器2.3、流迭代器3、函数适配器3.1、* bindbind 使用方法bind 简化原理3.2、mem_fn适配器就是接口,对容器、迭代器、算法进行包装,但其实质还是…...
防抖和节流
防抖和节流的区别?防抖:触发高频事件后n 秒内 函数只会执行一次,如果n秒内 高频事件在在次触发,则会重新计算节流:高频事件触发,但在n 秒内 只会执行一次,所以节流会稀释函数的执行频率下面就是…...
vue3 微信扫码登录及获取个人信息实现的三种方法
一、流程: 微信提供的扫码方式有两种,分别是: 跳转二维码扫描页面 内嵌式二维码根据文档我们可以知道关于扫码授权的模式整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站&…...
告别手动重标:基于Python脚本的Labelme数据集增强与JSON同步更新实战
1. 为什么我们需要自动化处理Labelme标注数据 做计算机视觉项目的朋友都知道,数据标注是个体力活。特别是使用Labelme这类工具进行语义分割标注时,每张图片都要手动勾勒物体轮廓,工作量巨大。更让人头疼的是,当我们对原始图片进行…...
IBM System/4 Pi:航空航天计算机的兴衰与技术传奇
【导语:1981 年航天飞机首飞,其发射和大部分飞行环节由 IBM 的 System/4 Pi 系列 AP - 101B 计算机控制。该系列于 1967 年推出,广泛应用于航空航天等领域,虽发挥重要作用,但相关信息却较难获取。】System/4 Pi&#x…...
终极Node.js无头浏览器测试指南:Zombie.js与Mocha集成实战
终极Node.js无头浏览器测试指南:Zombie.js与Mocha集成实战 【免费下载链接】zombie Insanely fast, full-stack, headless browser testing using node.js 项目地址: https://gitcode.com/gh_mirrors/zo/zombie 在当今快速发展的Web开发领域,Zomb…...
Flask-AppBuilder表单验证终极指南:构建企业级安全应用的10个核心技巧
Flask-AppBuilder表单验证终极指南:构建企业级安全应用的10个核心技巧 【免费下载链接】Flask-AppBuilder Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, googl…...
各版本易筋经意识层操作的系统动力学分析
——基于同源共律公理与锚序公式的元逻辑推导摘要本报告以同源共律公理与三维解耦框架为分析工具,对易筋经七种主要版本的意识层要求进行系统性拆解与比较。通过将各版本意识操作映射至“意识层类型→能量层共振→物理层显化”的因果链,揭示其内在优劣与…...
把股票数据能力接进 AI:stock-sdk-mcp 的实践整理
起因 如果你经常用 Cursor、Claude 这类 AI 工具,应该已经能明显感觉到它们在通用问答和代码任务上越来越强了。但一旦问题变成金融数据查询,比如“看看贵州茅台今天的行情”“把最近 60 个交易日的日 K 线拉出来,再判断一下 MACD 和 RSI”&…...
Windows下OpenClaw安装详解:GLM-4.7-Flash模型联调全流程
Windows下OpenClaw安装详解:GLM-4.7-Flash模型联调全流程 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年我在处理个人知识管理时,发现每天要重复执行大量机械操作:整理网页摘录、归类PDF文档、生成日报摘要。尝试过各种自动化工具后&#x…...
OrangePi 镜像烧录全攻略:从工具选择到实战避坑
1. 烧录工具选择与对比 第一次接触OrangePi开发板时,最让我头疼的就是镜像烧录工具的选择。市面上工具五花八门,每个教程推荐的软件都不一样。经过多次实测,我总结出三款最靠谱的烧录工具,它们各有特点: Win32DiskImag…...
从设计稿到上架:一份给独立开发者的Android应用图标全流程制作指南
从设计稿到上架:独立开发者的Android应用图标全流程实战 在移动应用生态中,图标是用户对产品的第一印象。Google Play商店数据显示,专业设计的应用图标能提升40%以上的点击率。但对于独立开发者和小团队而言,如何在有限资源下打造…...
PX4无人机开发实战:5个关键ROS话题的订阅与发布详解(附代码示例)
PX4无人机开发实战:5个关键ROS话题的订阅与发布详解(附代码示例) 当你在PX4无人机开发中首次接触ROS通信时,可能会被各种话题和服务搞得晕头转向。作为连接飞控与外部系统的桥梁,这些通信接口直接决定了无人机的可控性…...
