专题:一看就会的C++类模板讲解 (1)

news/2024/3/29 1:37:59/文章来源:https://blog.csdn.net/bc202205/article/details/129264525

目录

一.类模板的作用

二.类模板的定义:

三.类模板的声明格式:

四.类模板对象

五.再举一个例子


一.类模板的作用

        面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样,但是仅仅因为数据类型的不同,导致想要实现同一目标,我们就需要写好多个只有数据类型不同、其他内容都相同的类。这无疑是费时耗力、臃肿繁琐的。

        在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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75371.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS - js中常用的深拷贝和浅拷贝理解

文章目录1&#xff0c;JS数据类型2&#xff0c;深浅拷贝概念3&#xff0c;浅拷贝实现4&#xff0c;深拷贝实现1&#xff0c;JS数据类型 基本数据类型&#xff1a; Number、Boolean、String、undefined、Null。变量是直接按值存放的&#xff0c;存放在栈内存中的简单数据段&am…

BAT测开8年工作总结,这些都看懂了,Linux就没问题了

一、文件目录操作 1. ls 命令 ls 命令不仅可以查看 linux 文件夹包含的文件而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。 命令格式 ls [选项][目录名] 常用参数 -l &#xff1a;列出长数据串&#xff0c;包含文件的属性与权限数据等-a &#xff…

实战|掌握Linux内存监视:free命令详解与使用技巧

文章目录前言一. free命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看free相关的信息3.2 以MB的形式显示内存的使用情况3.3 以总和的形式显示内存的使用情况3.4 周期性的查询内存的使用情况3.5 以更人性化的形式来查看内存的结果输出四. free在脚本中的应用总结前言 大家…

Dataway 让 Spring Boot 不再需要 Controller、Service、DAO、Mapper 简单接口直接开发。

新的sql语法可以先看一下官网&#xff0c;部署起来之后会用到Dataql&#xff1a; DataQL - 数据查询语言https://www.dataql.net/先看一下效果 接下来来实现一下。 1 创建spring boot项目 导入依赖 <!--begin dataWay--><!--hasor-spring 负责 Spring 和 Hasor 框架之…

Confluence 安装

Confluence 安装 一、购买一台服务器 推荐使用 Ubuntu 版本服务器。 二、安装宝塔面板 官方安装地址 安装地址 Centos 安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec…

车机系统开发——Android Automotive

Android Automotive介绍 Android Automotive是⼀个基本的Android平台&#xff0c;它运⾏预安装的&#xff08;车载信息娱乐&#xff09;IVI系统&#xff0c;Android应⽤程序以及可选的第⼆⽅和第三⽅Android应⽤程序。 Android Automotive的硬件抽象层(HAL)为Android框架提供…

系统升级丨分享返佣,助力商企实现低成本高转化营销

秉承助力传统经济数字化转型的长远理念 酷雷曼VR再次在VR全景营销中发力 创新研发“分享返佣”功能 进一步拓宽商企VR全景营销渠道 助力商企搭建低成本、高传播、高转化 的VR营销体系 01、什么是“分享返佣”&#xff1f; ●“分享返佣”即“推广”返佣&#xff0c;是酷…

Softing OPC Tunnel——绕过DCOM配置实现OPC Classic广域网通信

一 摘要 Softing OPC Tunnel是dataFEED OPC Suite的一个组件&#xff0c;可避免跨设备OPC Classic通信中出现的DCOM配置问题&#xff0c;同时可保证跨网络数据交换的高性能和可靠性。OPC Tunnel内部集成的存储转发功能&#xff0c;可在连接中断时缓存数据&#xff0c;并在重新…

【数据结构与算法】图 ( 图的存储形式 | 图的基本概念 | 图的表示方式 | 邻接矩阵 | 邻接表 | 图的创建 | 代码示例 )

文章目录一、图的存储形式二、图的基本概念三、图的表示方式1、邻接矩阵2、邻接表四、图的创建 ( 代码示例 )一、图的存储形式 线性表 中的元素 , 有 一个 直接前驱 和 一个 直接后继 ; 树 中的元素 , 有 一个 直接前驱 和 多个 直接后继 ; 图 中的元素 , 有 多个 直接前驱 和…

华为OD机试题,用 Java 解【入栈出栈】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

软件分析笔记02---Intermediate Representation

整体contents compiler &#xff08;source code ——> machine code&#xff09; non-trivial非平凡的 经过 语义分析->语法分析->类型检查等各种trivial的分析&#xff08;前端&#xff09;&#xff0c;生成中间代码IR->进行non-trivial的分析&#xff08;及静…

47个SQL性能优化技巧,看到就是赚到

1、先了解MySQL的执行过程 了解了MySQL的执行过程&#xff0c;我们才知道如何进行sql优化。 &#xff08;1&#xff09;客户端发送一条查询语句到服务器&#xff1b; &#xff08;2&#xff09;服务器先查询缓存&#xff0c;如果命中缓存&#xff0c;则立即返回存储在缓存中的…

Python大数据培训班特色优势及工作方向

Python大数据培训班有多个大数据培训班类型&#xff0c;同时也包括训练营、学徒班、就业班等。 具体班型&#xff1a; 大数据挖掘与人工智能&#xff08;大数据分析&#xff09;学徒班、大数据应用开发学徒班 大数据挖掘与人工智能&#xff08;大数据分析&…

解决MySQL的 Row size too large (> 8126).

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;无尽的折腾后&#xff0c;终于又回到…

第14天-ElasticSearch环境配置,构建检索服务及商品上架到ES库

1.ElasticSearch概念 官网介绍&#xff1a;https://www.elastic.co/cn/what-is/elasticsearch/ 官网学习文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 1.1.ElasticSearch与MySQL的比较 MySQL有事务性,而ElasticSearch没有…

论文笔记:A Time Series is Worth 64 Words: Long-term Forecasting with Transformers

ICLR 2023 比较简单&#xff0c;就不分intro、model这些了 1 核心思想1&#xff1a;patching 给定每个时间段的长度、划分的stride&#xff0c;将时间序列分成若干个时间段 时间段之间可以有重叠&#xff0c;也可以没有每一个时间段视为一个token 1.1 使用patching的好处 降…

糖化学试剂55520-67-7,5-vinyl-2-deoxyuridine,5-乙烯基-2-脱氧尿苷特点分析说明

5-vinyl-2-deoxyuridine(5-VdU)&#xff0c;5-vinyl-2-deoxyuridine&#xff0c;5-Vinyldeoxyuridine5-乙烯基-2-脱氧尿苷 | CAS&#xff1a;55520-67-7 | 纯度&#xff1a;95%试剂信息&#xff1a;CAS&#xff1a;55520-67-7所属类别&#xff1a;糖化学分子量&#xff1a;C11H…

MySQL索引类型(type)分析

type索引类型 system > const > eq_ref > ref > range > index > all 优化级别从左往右递减&#xff0c;没有索引的⼀般为’all’。推荐优化目标&#xff1a;至少要达到 range 级别&#xff0c; 要求是 ref 级别&#xff0c; 如果可以是 const 最好&#xff…

单通道说话人语音分离——DPRNN(Dual-Path Recurrent Neural Network)

参考文献&#xff1a;《DUAL-PATH RNN: EFFICIENT LONG SEQUENCE MODELING FOR TIME-DOMAIN SINGLE-CHANNEL SPEECH SEPARATION》 DPRNN网络是Con-Tasnet的改进网络 Con-Tasnet介绍详情请看上一篇文章 单通道说话人语音分离——Conv-TasNet(Convolutional Time-domain audio…

UWB到底是什么技术?

什么是空间感知能力 所谓的空间感知能力&#xff0c;就是感知方位的能力。更直接一点&#xff0c;就是定位能力。说白了&#xff0c;利用UWB技术&#xff0c;手机和智能设备可以更精准地实现室内定位&#xff0c;不仅可以感知自己的位置&#xff0c;还可以感知周边其它手机或设…