C++模板 — 类模板

c++类模板学习指南 有助于你深入地学习,理解c++类模板相关技术。由简单到复杂逐渐深入学习。 立即下载

请先阅览函数模板相关内容:C++模板 — 函数模板

类模板的定义

1、格式与写法:

template < class类型参数1, class类型参数2, ...>
class 类模板名
{
    成员函数和成员变量
};

2、如果在类外定义成员函数,若此成员函数中有模板参数存在,则除了需要和一般类的类外定义成员函数一样的定义外,还需要在函数外进行模板声明:

template <类型参数表>
返回值类型  类模板名<类型参数名列表>::成员函数名(参数表)
{
    ...
}

3、用类模板定义对象的写法如下:

类模板名<真实类型参数表> 对象名(构造函数实际参数表);

4、如果类模板有无参构造函数,那么也可以使用如下写法创建对象:

类模板名 <真实类型参数表> 对象名;

第一个类模板程序:

#include<iostream>
using namespace std;
//定义类模板
template<class T1,class T2>
class Ha
{
public:
	Ha(T1 _t1, T2 _t2);
	void show();

private:
	T1 t1;
	T2 t2;
};

//类模板的类模板函数的类外定义
template<class T1,class T2>
Ha<T1,T2>::Ha(T1 _t1, T2 _t2)
{
	t1 = _t1;
	t2 = _t2;
}

//类模板的普通函数类外定义
template<class T1, class T2>
void Ha<T1,T2>::show()
{
	T1 tt = t1;
	cout << "t1=" << t1 << ",t2=" << t2 << endl;
}

int main()
{
	Ha<int, int> aa(1,2);
	aa.show();

	system("pause");
	return 0;
}

类模板特性

1. 类模板和函数模板的区别

  •  类模板没有自动类型推导的使用方式
  • 类模板在模板参数列表中可以有默认参数

点击查看实现代码

2. 类模板中成员函数和普通类中成员函数创建时机有区别

  • 普通类中的成员函数一开始就可以创建
  • 类模板中的成员函数在调用时才创建

点击查看实现代码:

3. 类模板对象作为函数参数

类模板对象一共有三种传入方式:

  1. 指定传入的类型   --- 直接显示对象的数据类型【最常用】
  2. 参数模板化    --- 将对象中的参数变为模板进行传递
  3. 整个类模板化   --- 将这个对象类型 模板化进行传递

点击查看实现代码:

类模板与继承

相关规则:

  1. 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型
  2. 如果不指定,编译器无法给子类分配内存
  3. 如果想灵活指定出父类中T的类型,子类也需变为类模板
template <class T1, class T2> //类模板
class A
{
	Tl v1; T2 v2;
};

template <class T1, class T2>
class B : public A <T2, T1> //错误写法:“class B:public A”;因为必须知道父类中的T类型才能继承给子类
{
	T1 v3; T2 v4;
};

template <class T>
class C : public B <T, T>
{
	T v5;
};

int main()
{
	B<int, double> obj1;
	C<int> obj2;
	return 0;
}

当编译到main函数中的第一个语句:“B<int, double> obj1;”,编译器用 int 替换类模板 B 中的 T1,用 double 替换 T2,生成 B<int, double> 类如下:

class B <int, double>: public A <double, int>
{
     int v3; double v4;
};

B <int, double> 的基类是 A <double, int>。于是编译器就要用 double 替换类模板 A 中的 T1,用 int 替换 T2,生成 A<double, int> 类如下:

class A <double, int>
{
    double v1; int v2;
};

 

 

类模板中的静态成员

类模板中可以定义静态成员,从该类模板实例化得到的所有类都包含同样的静态成员。

#include <iostream>
using namespace std;

template <class T>
class A
{
private:
	static int count;
public:
	A() { count++; }
	~A() { count--; };
	A(A &) { count++; }
	static void PrintCount() { cout << count << endl; }
};

template<> int A<int>::count = 0;
template<> int A<double>::count = 0;

int main()
{
	A<int> ia;
	A<double> da;
	ia.PrintCount();
	da.PrintCount();
	return 0;
}

 

注:部分源代码和阐述出自“黑马程序员相关课程”!

点云直线检测-3DLineDetection复现 点云直线分割-Fast 3D line detection 阅读详情

相关推荐

LS-DYNA壳单元冲击仿真中的5个关键设置:以方管碰撞为例(含沙漏控制参数)

本文以方管碰撞为例,深入解析了LS-DYNA壳单元冲击仿真中的五个关键设置。重点探讨了沙漏控制参数(如IHQ=4)的选择逻辑、自接触算法优化、能量监控方法、材料模型(MAT_24)的真实应力-应变曲线与应变率效应设置,以及单元公式的选取。这些核心设置共同决定了仿真的精度与效率,是确保方管冲击仿真结果可靠性的基石。

salt的博客 625

C++编程——类模板

文章目录1 类模板语法2 类模板与函数模板的区别3 类模板中成员函数创建时机4 类模板对象做函数参数 1 类模板语法 类模板的作用:建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代表 语法: template<typename T> 类 解释: template声明创建模板 typename表明其后面的符号是一种数据类型,可以用class代替 T是通用的数据类型,名称可以替换,通常为大写字母 示例: //类模板 template<class NameType, cl

professor_tao的博客 3万+

信号完整性SI-PI

SI设计的主要难点在于需要综合信号的幅度、噪声、边沿、延时等影响信号质量的多种因素,并且这种因素常常相互依赖、互相影响,交叉在一起。1.1、信号过冲 (欠阻尼状态,可并联一个合适的电容):过冲会造成强烈的电磁干扰,另一方面会损伤后面的电路的输入及,甚至失效。信号完整性SI:是指电路系统中信号的质量,如果在要求的时间内,信号能不失真的从源端传输到接收端。优点:提供较慢的上升时间,减少反系量,产生更小的EMI,从而降低过冲,增加信号质量。导线之间的间距过小, 就会产生串扰,间距越小、串扰越大。

weixin_42304393的博客 4868

C++实验3 模板

一.模板函数 定义:函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能 为了交换两个整型变量的值,需要写下面的 Swap 函数: void Swap(int & x, int & y) { int tmp = x; x = y; y = tmp; } 为了交换两个 double 型变量的值,还需要编写下面的 Swap 函数: void Swap (doub

a457359584的博客 839

图文实录|大规模预训练模型:探讨与展望

第二期「澜舟分享会」我们邀请到来自复旦大学计算机学院邱锡鹏教授分享了“大规模预训练模型:探讨与展望”,本此演讲主要围绕大规模预训练语言模型展开讨论,并探讨大模型成功的原因、适用场景、未来发展方向以及身处大模型时代我们的机遇。

langboat_mengzi的博客 1204

别再凭感觉了!手把手教你用Excel搞定激光器MPE与NOHD安全计算(附模板下载)

本文详细介绍了如何利用Excel自动化计算激光器的MPE(最大允许照射量)和NOHD(标称眼危害距离),提升激光安全评估的效率和准确性。通过实战案例和模板下载,帮助工程师快速掌握GB/T 7247标准中的关键计算,避免常见错误,适用于激光测距仪等设备的安评工作。

weixin_30954265的博客 466

C++ 泛型程序设计(二): 类模板

类模板 背景: 定义一批相似的类定义类模板生成不同的类 在调用类模板时,指定参数,由编译系统根据参数提供的数据类型自动产生相应的模板类 类模板的定义 template <class 类型参数1, class 类型参数2, ...> class 类模板名 { 成员函数和成员变量; }; 定义成员函数 template <类型参数表> 返回值类型 类模板名<类型参...

优快云 408

三甲医院网络架构与安全建设实战

华为OceanStor] [华为OceanStor][PACS存储双活] [HIS数据库同步]患者隐私 数据脱敏 天清Web防火墙动态脱敏策略。主数据中心 --[OTV专线]-- 备数据中心。实现医疗业务网/卫生专网/互联网三网隔离。核心业务配置(华为CE6865)自动备份配置(每天02:00)安全事件响应(30分钟SLA)漏洞扫描(每周日00:00)实现医疗物联网统一接入管控。五、等保2.0合规关键配置。堡垒机登录(双因素认证)四、医疗物联网安全方案。

有小小的远大抱负 1911

C++模板(二)

目录 8、类模板的分文件编写问题以及解决 9、类模板碰到友元函数 10、类模板的应用——数组封装 8、类模板的分文件编写问题以及解决 .h .cpp分别写声明和实现 但是由于 类模板的成员函数运行阶段才去创建,导致包含.h头文件,不会创建函数的实现,无法解析外部命令 解决方案 包含 .cpp文件 (不推荐) 不要进行分文件编写,写到同一个文件中,进行声明和实现,后缀名改为....

鄠邑原野的博客 525

Oracle EBS FA 创建成批增加执行时间长且报错

摘要 Oracle EBS系统在执行"创建成批增"请求时出现长时间运行并报错(ORA-00603和ORA-03114)。

陈显平的专栏-Oracle EBS 173

开源模型应用落地-qwen模型小试-入门篇(二)

在windows环境下,使用transformer设置模型参数/System Prompt/历史对话

以微薄之力,予他人些许温暖. 3234

C++模板递归深度解析:如何在编译期完成循环计算?

掌握C++模板递归与编译期循环,实现高效无运行开销的计算。适用于元编程、类型计算和常量生成,通过递归实例化展开循环,提升性能。深入解析实现原理与优化技巧,值得收藏。

DeepNest的博客 316

TPAMI 2024 | MO-MIX:基于深度强化学习的多目标多智能体协同决策

深度强化学习(RL)已被广泛应用于解决复杂的决策问题。在许多现实世界的场景中,任务通常有多个相互冲突的目标,并且可能需要多个智能体进行合作,这些是多目标多智能体决策问题。然而,在这个交叉领域的研究工作还相对较少。现有的方法仅限于单独的领域,并且只能处理具有单一目标的多智能体决策,或者具有单一智能体的多目标决策。在本文中,我们提出了MO-MIX来解决多目标多智能体强化学习(MOMARL)问题。我们的方法基于集中训练与分散执行(CTDE)框架。

小白学视觉 1129

C++模板、类模板、函数模板详解都在这里了

C++模板、类模板、函数模板详解一、引言二、函数模板1、定义2、调用3、多个虚类型三、类模板1、定义2、调用四、类的函数模板五、类作为数据类型传入六、类模板与继承七、类模板与友元 一、引言 在写排序算法时,如果要写一个交换两个数据的函数,由于基本数据类型有int、float、double等等类型,所以针对每种数据类型可能我们要写很多swap函数,这些函数除了传入的数据类型不同,函数体结构大致相同。...

hsxyfzh的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++类模板

类模板允许我们创建一个可以在工作在多种类型上的类,比如数组,链表,队列,栈等等。其工作原理就是用占位符代替实际的类型,当我们使用这个类模板时,再指定具体的类型。函数模板建议用typename描述通用数据类型,类模板建议用class。上述类模板例子中,MyArray类可以用于创建各种类型的数组。包括, 甚至是等。**需要注意的是,在创建模板类的实例时,我们必须指定模板参数。**例如,我们需要创建一个存储整数的MyArray,我们可以这样写。这里,模板参数时int,表示我们创建的MyArray将存储int。

Tian Meng的博客 5362

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c++类模板详解

学习目标:掌握类模板成员函数分文件编写产生的问题以及解决方式问题:类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到解决:解决方式1:直接包含.cpp源文件解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制。

m0_62681656的博客 3433

c++详解模板泛型编程,详解类模板的实现为什么不能放在cpp文件

泛型编程是一种编程范式,它允许程序员编写与类型无关的代码,从而在编译期确定具体的类型。我们通过模板编写一个函数可以让编译器,自动生成对应类型的实现,这大大减少了重复代码的出现,还提高了代码的可维护性和可扩展性,很重要的一点是模板有特性。

z3363的博客 1066

c++中类模板中的函数第三种情形:声明和实现分来,分别在不同的.h和.cpp文件中

关于类模板的解释在“c++中类模板中的函数第二种情形”中已经做了说明,本节内容具体看代码即可。 .h文件: #pragma once #include <iostream> using namespace std; template <typename T> class Complex; //类的前置声明 template <typename T> ...

一路向北 1111

C++ 类模板

类模板是C++中一种特殊的模板,用于创建通用的类。通过类模板,我们可以定义一个通用的类,这个类可以接受不同类型的数据作为其成员或参数。在使用类模板时,我们需要指定具体的数据类型,编译器会根据指定的数据类型生成对应的类。作用:建立一个通用类,类中的成员的数据类型是不指定的(不具体),用一个或者多个虚拟的类型来表达。

鲸落博客 935

C++中的类模板

文章目录1 C++中的类模板简介2 类模板的工程应用 1 C++中的类模板简介 我们知道,有些类主要用于存储和组织数据元素,类中数据组织的方式和数据元素的具体类型无关,如:数组类、链表类、Stack类、Queue类等。C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。 C++中的类模板: 以相同的方式处理不同的类型。 在类声明前使用template进...

木子皿--啥都不会的菜鸟 705

C++ 类模板与模板类详解

  在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?   事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template<class T>,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键...

weixin_30907935的博客 6464
上一篇: C++模板 — 函数模板
下一篇: 对数据结构的初级定义和初级认识
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值