“类模板”

news/2024/11/8 21:15:35 标签: c++, 经验分享, 学习方法

文章目录

  • 一. 类模板的引入
  • 二. 类模板的格式
  • 三. 类模板的实例化
  • 注意点

一. 类模板的引入

我们曾经学习过:typedef STDataTy int;或者是using STDataTy = int;,这个的作用是将使用STDataTy 的地方替换成int

#include<stdio.h>
using STDataTy = int;
class Stack
{
public:
	Stack(size_t capacity = 4)
	{
		_array = new STDataTy[capacity];
		_capacity = capacity;
		_size = 0;
	}
private:
	STDataTy* _array;
	size_t _capacity;
	size_t _size;
};
int main()
{
	Stack st1;  //希望STDataTy 是 int
	Stack st2;  //希望STDataTy 是 double
}

显然这种情况一个函数是实现不了的,STDataTy 只能代表一个值,不能一会代表int,一会代表double,除非我们写两个类,但是两个类有高度相似。

这个时候,我们可以采用类模板

二. 类模板的格式

  1. 类模板不能传参去实例化(函数模板是可以的)。所以类模板必须显式实例化。
template<class T1, class T2, ..., class Tn> 
class 类模板名
{
 // 类内成员定义
}; 

三. 类模板的实例化

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

// Stack是类名,Stack<int>才是类型
Stack<int> st1;    // int
Stack<double> st2; // double

我们可以将T理解为类模板的形参,而Stack<int> st1;中的int是实参

注意点

  1. 声明和定义一般会在同一个文件(.h或者.cpp),
    在这里插入图片描述

  2. 如果声明和定义在一个文件,但是分离了怎么写
    在这里插入图片描述
    而且类模板这个地方,类名不是类型,需要类名+模参------->才是类型
    在这里插入图片描述


http://www.niftyadmin.cn/n/5744445.html

相关文章

React 入门课程 - 使用CDN编程React

1. 第一个React 注意&#xff1a;在vscode里&#xff0c;使用Live Server来运行html文件。 index.html <html><head><link rel"stylesheet" href"index.css"><script crossorigin src"https://unpkg.com/react17/umd/react.de…

P11229 [CSP-J 2024] 小木棍

[CSP-J 2024] 小木棍 题目描述 小 S 喜欢收集小木棍。在收集了 n n n 根长度相等的小木棍之后&#xff0c;他闲来无事&#xff0c;便用它们拼起了数字。用小木棍拼每种数字的方法如下图所示。 现在小 S 希望拼出一个正整数&#xff0c;满足如下条件&#xff1a; 拼出这个数…

Transformer和BERT的区别

Transformer和BERT的区别比较表&#xff1a; 两者的位置编码&#xff1a; 为什么要对位置进行编码&#xff1f; Attention提取特征的时候&#xff0c;可以获取全局每个词对之间的关系&#xff0c;但是并没有显式保留时序信息&#xff0c;或者说位置信息。就算打乱序列中token…

vue 3:监听器

目录 1. 基本概念 2. 侦听数据源类型 1. 监听getter函数 2. 监听 ref 或 reactive 的引用 3. 多个来源组成的数组 4. 避免直接传递值&#xff01;&#xff01;&#xff01; 3. 深层侦听器 4. 立即回调的侦听器 5. 一次性侦听器 6. watchEffect() 7. 暂停、恢复和停止…

页面、组件、应用、生命周期(微信小程序)

文章目录 页面生命周期函数组件生命周期函数应用&#xff08;App&#xff09;生命周期函数页面与组件生命周期的执行顺序注意事项 在微信小程序中&#xff0c;生命周期函数是指页面或组件在不同阶段会被自动调用的特定函数。这些函数可以帮助开发者在适当的时机完成特定的初始化…

穿销程序之如何写停止程序

这里的停止依旧是用停止指令来进行停止的&#xff0c;只用停止开关是无法进行长时间控制的&#xff0c;停止开关是瞬时控制。

YOLOv11融合特征细化前馈网络 FRFN[CVPR2024]及相关改进思路

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 一、 模块介绍 论文链接&#xff1a;Adapt or Rerish 代码链接&#xff1a;https://github.com/joshyZhou/AST 论文速览&#xff1a;基于 transformer 的方法在图像恢复任务中取得了有希望的性能&#xff0c;因为…

LINUX下的Myql:库的操作

目录 1.库的创建 2.字符集和校验集 1.查看db1默认的字符集合校验集 2.设置字符集和校验集 3.库的查看 4.数据库的修改 5.数据库的删除 6.数据库的备份 1.库的创建 create database db1; 创建一个名为db1的数据库&#xff0c;LINUX会创建一个名为db1的文件夹。 show data…