【类模板】类模板的基本范式

news2024/9/21 16:49:28

一、类模板的概念

类模板与一般的模板一样,都是通过给定的模板参数,生成具体的类,也就是实例化一个特定的类。这个概念和函数模板差不多。
例如,在 C + + C++ C++中的 s t d : : v e c t o r std::vector std::vector容器就是一个经典的类模板,如 s t d : : v e c t o r < i n t > std::vector<int> std::vector<int>,其中 < i n t > <int> <int>表示实例化出一个 i n t int int类型的 v e c t o r vector vector容器。
引入类模板是十分必要的,具体如下:

在这里插入图片描述

二、类模板的基本范式

具体而言,类模板一般含有以下元素:

1.成员变量
2.成员函数
3.自定义类型表
4.构造函数和析构函数
5.运算符重载
6.迭代器接口

这里实现一个自定义的 m y v e c t o r myvector myvector容器,基本代码如下:

template<typename T>
class myvector {
public:
	//类型表
	typedef T* myiterator; //迭代器名称(指针)
public:
	//构造函数
	myvector() {};
	myvector(myvector const&){};

	//赋值运算符
	myvector& operator=(myvector const&); //也可以写成myvector<T>operator(myvector<T>const&)

public:
	//成员函数
	void myfunc();

	//静态成员函数
	static void my_static_func();

public:

	//迭代器接口 
	myiterator begin();
	myiterator end();
	
};

通常,在类内的函数可以不用添加 < T > <T> <T>类型名,可以省略。
而在类外实现的话就必须加上 t e m p l a t e < T > template<T> template<T>,并且函数名也要带上 < T > <T> <T>,如下,这里实现了静态函数和普通函数的类外实现:

//类外实现
template<typename T>
void myvector<T>::myfunc() { //类外实现需要补充参数<T>
	std::cout << "调用了myvector的成员函数\n";
}

template<typename T>
void myvector<T>::my_static_func() {
	std::cout << "调用了myvector的静态成员函数\n";
}

更多细节如下:

在这里插入图片描述

三、类模板的实例化

与函数模板不一样,类模板中的成员函数只有被调用的时候才会被实例化,其中构造函数在创建对象的时候被实例化调用。
我们可以用 d u m p b i n dumpbin dumpbin工具来查看是否实例化了类模板函数:

我们这里只创建类,而不调用类内函数

void Test() {
	myvector<int>vec;
	
}

可以发现:成功实例化了 m y v e c t o r < i n t > myvector<int> myvector<int>的构造函数,而没有实例化类内函数。
在这里插入图片描述

让我们在调用类内部的函数看看:

void Test() {
	myvector<int>vec;
	vec.myfunc();
	myvector<int>::my_static_func();
}

现在,我们实例化了三个函数:

1.构造函数
2.myfunc成员函数
3.my_static_func静态成员函数

具体如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AWS账号关闭后的影响:您需要知道的一切

亚马逊网络服务&#xff08;AWS&#xff09;作为全球领先的云计算平台&#xff0c;为众多企业和个人提供了便捷、高效的云服务。然而&#xff0c;当用户决定关闭其AWS账号时&#xff0c;可能会对其现有的服务和资源产生重大影响。我们九河云将通过本文将深入探讨AWS账号关闭后的…

树莓派3B驱动ST7735(Python)

一 环境准备 之前做了PICO驱动ST7735&#xff0c;这次再进一步&#xff0c;用树莓派3B来驱动。还是先上图。 最开始还是根据GPT的指引来做的。SPI的细节就不多说了&#xff0c;之前在PICO的时候说过了。 总线学习3--SPI-CSDN博客 二 实现细节 连接方式如下&#xff1a; VCC …

猛兽财经:AMD股票值得长期投资吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 过去三年对AMD来说可谓压力山大&#xff0c;由于个人电脑(PC)市场的疲软&#xff0c;AMD的股价一直承受着巨大的压力&#xff08;AMD的股价在过去三年中仅上涨了44%&#xff0c;远远低于费城半导体指数56%的涨幅&#xff…

快速申请公网、内网IP地址SSL证书

在当今社会&#xff0c;网络安全越来越重要。SSL证书不仅能够提供加密的数据传输&#xff0c;还能增强用户信任度&#xff0c;提升搜索引擎排名等。但是只有IP地址可以用来申请SSL证书吗&#xff1f;答案当然是可以的&#xff0c;而且申请也非常容易。下面是快速申请流程&#…

SpringBoot3核心特性-数据访问

目录 传送门前言整合SSM场景一、创建SSM整合项目二、配置数据源三、配置MyBatis四、CRUD编写五、自动配置原理六、快速定位生效的配置七、扩展&#xff1a;整合其他数据源1、Druid 数据源2、附录&#xff1a;示例数据库 传送门 SpringMVC的源码解析&#xff08;精品&#xff0…

如何通过工业交换机增加网络带宽?

在现代工业环境中&#xff0c;网络的稳定性和带宽的充足性显得尤为重要。随着设备的增加和数据流量的增长&#xff0c;单一的网络带宽往往难以满足企业对于高效数据传输的需求。因此&#xff0c;如何通过工业交换机来增加网络带宽&#xff0c;成为了技术人员关注的重点。 首先&…

新手使用住宅代理有哪些常见误区?

作为新手&#xff0c;在使用住宅代理时往往会陷入一些常见误区&#xff0c;这些误区不仅可能影响到使用效果&#xff0c;甚至可能会带来安全风险。今天将与大家探讨新手在使用住宅代理时可能会遇到的几个关键误区&#xff0c;并提供相应的解决方案。误区一&#xff1a;盲目追求…

「合诚」× 企企通SRM项目启动,高分子新材料和健康产业高新技术企业将奔赴数智采购新征程

为拉通产业链上下游&#xff0c;优化提升整体效率&#xff0c;帮助企业变革采购管理方式&#xff0c;推动化工新材料行业高质量发展&#xff0c;近日&#xff0c;合诚技术股份有限公司&#xff08;以下简称“合诚”&#xff09;携手企企通成功举办了SRM项目启动会&#xff0c;双…

微电网能量管理系统在企业光伏电站的应用

发展背景&#xff1a; 在全球不可再生能源稀缺的背景下各个国家都在大力发展可再生能源&#xff0c;因此光伏行业应需而生且迅速发展了起来。能源转型中的光伏储能是指将光伏发电与储能技术相结合&#xff0c;以解决太阳能发电的间歇性和不稳定性问题&#xff0c;实现更稳定、…

怎么使用PPT倒计时插件?这款在线PPT工具,堪称办公必备!

在进行ppt演示时&#xff0c;为了更好地把控演示时间&#xff0c;有些人会在演示的同时设置一个倒计时&#xff0c;但Office的ppt本身没有提供倒计时功能&#xff0c;想要实现这一目的&#xff0c;就得在现有的基础上安装倒计时插件。 ppt倒计时插件 目前可用的免费ppt倒计时…

如何判断全面预算和EPM软件架构是否符合技术规范?

以全面预算管理软件为代表的企业绩效管理EPM软件&#xff0c;已经日益成为企业数字化智慧化管理的核心软件系统。国际企业采用了30多年的EPM系统&#xff0c;也逐渐被国内企业所熟识。全面预算管理软件的作用不仅仅是预算编报&#xff0c;还是整个企业实现高效经营分析和快速决…

基于PCL实现RGB-D图像转换为点云

原理: RGB 和 depth图已经对齐了,也就是 depth 图中某个位置的深度值在 RGB图中同样的位置处就是它对应的颜色。假设相机内参矩阵为: 则RGB-D图像转换为点云代码如下: for (int m = 0; m < depth.rows; m++)for (int n = 0

英飞凌HSM内核开发-CSM模块配置

CsmGeneral CsmJob CsmKey CsmQueue CsmPrimitive

最新保姆级教程

如何使用 WildCard 服务注册 Claude3 随着 Claude3 的震撼发布&#xff0c;最强 AI 模型的桂冠已不再由 GPT-4 独揽。Claude3 推出了三个备受瞩目的模型&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 以及 Claude 3 Opus&#xff0c;每个模型都展现了卓越的性能与特色。其中&a…

Python+Selenium 通过添加cookies或token解决网页上验证码登录问题

cookie或token可以保存登录信息&#xff0c;当我们拿到cookie后&#xff0c;可以通过向浏览器发送cookie中记录的数据&#xff0c;直接变成登录状态&#xff0c;不需要再登录。 下面举个栗子 1、先把正常的登录方式码一下&#xff1a; browser webdriver.Chrome(executable_…

颈动脉斑块的MR图像分割

颈动脉斑块的MR图像分割是一个复杂的图像处理过程&#xff0c;它结合了医学影像学和计算机视觉技术。以下是一个基于一般流程的描述&#xff0c;包括可能的步骤和示例代码&#xff08;使用Python和OpenCV库&#xff09;&#xff0c;但请注意&#xff0c;实际应用中可能需要针对…

心脑血管科曹启富主任医师:血压高降不下来?找准这三个方向真的降下来了

高血压&#xff0c;这一影响超过3亿国人健康的慢性病&#xff0c;常常让人倍感困扰。尽管在医生的指导下科学用药&#xff0c;并通过调整饮食和生活习惯&#xff0c;大多数患者都能将血压控制在适宜水平&#xff0c;但在日常生活中&#xff0c;我们仍可能遇到血压突然升高的情况…

NFV架构

1&#xff09;NFV的背景 来自IT界的启示&#xff0c;给网络产业带来了网络架构和设备架构两个层面的思考。网络架构层面引入对SDN控制器的思考&#xff0c;设备架构层面引入对设备部署形态的思考&#xff08;NFV&#xff09;。 网络功能虚拟化被称为NFV&#xff08;Network Fu…

9月新机首发:骁龙芯片+超大电池,游戏玩家的终极选择

随着秋风送爽的9月到来&#xff0c;智能手机和电子设备市场也迎来了新一轮的热潮。8月份的新机发布热潮刚刚退去&#xff0c;9月份的新机已经迫不及待地揭开了神秘的面纱。在众多备受期待的产品中&#xff0c;红魔品牌抢先官宣&#xff0c;两款全新的游戏平板将在9月5日正式亮相…

OV通配符证书具体申请流程

OV通配符HTTPS证书&#xff0c;也称为OV泛域名证书&#xff0c;是一种经过严格身份验证的证书类型&#xff0c;能够同时保护主域名以及主域名下所有二级子域名&#xff0c;为多个网站提供信息加密和身份认证服务。其申请过程相对于DV类型的证书会多几个步骤&#xff1a; 一、选…