C++泛编程(4)

类模板高级(1)

  • 1.类模板具体化
    • 部分具体化
    • 完全具体化
  • 2.类模板与继承

1.类模板具体化

有了函数模板具体化的基础,学习类模板的具体化很简单。类模板具体化有两种方式,分别为部分具体化和完全具体化。假如有类模板:

template<class T1,class T2>
class AA 
{public:T1 m_a;T2 m_b;AA(T1 a,T2 b):m_a(a),m_b(b){cout<<"类模板构造函数"<<endl;}void show();
};
template<class T1,class T2>
void AA<T1,T2>::show()
{cout<<m_a<<" "<<m_b<<endl;
}

这里把方法写在类外是为了更好地区分语法上的差别。这个模板的部分具体化和完全具体化有什么差别呢?

部分具体化

部分具体化是类模板特有的,它是指模板类的部分通用类型具有指定的数据类型,示例如下:

template<class T1>
class AA<T1,string>
{public:T1 m_a;string m_b;AA(T1 a,string b="ZhangSan"):m_a(a),m_b(b){cout<<"类模板部分具体化构造函数"<<endl;}void show();
};
template<class T1>
void AA<T1,string>::show()
{cout<<m_a<<" "<<m_b<<endl;
}

这就是AA模板类的一个不完全具体化版本了。这个AA模板缺省了一个通用类型参数,在类外对方法进行定义时需要指出AA的两个模板参数,具体参数也不可以省略,其余不变。

完全具体化

完全具体化就是类模板完全没有通用参数,它才像是函数模板具体化,举例如下:

template<>
class AA<char,string>
{public:char m_a;string m_b;AA(char a='m',string b="ZhangSan"):m_a(a),m_b(b){cout<<"类模板部分具体化构造函数"<<endl;}void show();
};
void AA<char,string>::show()
{cout<<m_a<<" "<<m_b<<endl;
}

这里有一个细节需要大家注意,我们在类外定义方法时不再需要写template标识符,但依然需要注明AA的两个具体的模板参数。
下面我们来调用一下模板类,看看调用的优先级:

int main()
{AA<int,int> aa(10,20);aa.show();AA<int,string> bb(10);bb.show();AA<char,string> cc('w',"LiSi");cc.show();
}

在这里插入图片描述
可以看到,如果满足完全具体化类的条件,会优先使用完全具体化类,如不满足,满足不完全具体化类条件优先使用不完全具体化类。只有当二者都不满足时才会使用普通的模板类。

2.类模板与继承

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

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

相关文章

C++ 哈希表(unordered_map与unordered_set)

文章目录 unordered_map 与 unordered_set哈希表 (Hash Table)哈希函数哈希冲突模拟实现封装 补充&#xff1a;unordered_map 与 unordered_set 的使用 unordered_map 与 unordered_set 就和名字一样&#xff0c;这是 map、set 的无序版本&#xff08;数据遍历出来是无序的&am…

机器学习 - 代价函数

场景 上次简单学习了支持向量机的概念。概念如下&#xff1a; 支持向量机&#xff08;SVM&#xff09;&#xff1a;SVM是一种监督学习算法&#xff0c;常用于分类问题。它的目标是找到一个超平面&#xff08;在二维空间中是一条线&#xff0c;在更高维空间中是一个面&#xf…

把网页打包成app(简单) 2024

文章目录 **01-准备好要打包的网页文件&#xff0c;一般包含HTML-CSS-JS-静态资源文件&#xff1a;****02-下载HBuilderX&#xff0c;注册一个账号-必须****注****册账号****(免费&#xff09;****03-新建一个H5项目&#xff1a;****04-然后把以下红框里面的这些文件都删掉&…

2024年【T电梯修理】报名考试及T电梯修理考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理报名考试考前必练&#xff01;安全生产模拟考试一点通每个月更新T电梯修理考试报名题目及答案&#xff01;多做几遍&#xff0c;其实通过T电梯修理复审考试很简单。 1、【多选题】TSGT7001-2009《检规(简称)…

C语言内存函数:memcpy、memcat、memmove介绍和模拟实现(实用性高,建议三连收藏)

目录 1.memcpy函数 1.1函数介绍 1.2函数示范使用 1.3函数的模拟实现 1.4补充 2.memmove函数 2.1函数介绍 2.2函数的使用示范 2.3函数的模拟实现 3.memcmp(内存比较函数&#xff09; 3.1函数介绍 3.2函数的示范使用&#xff0c;有趣的例子 4.函数补充memset(内存…

Pandas教程11:关于pd.DataFrame.shift(1)数据下移的示例用法

---------------pandas数据分析集合--------------- Python教程71&#xff1a;学习Pandas中一维数组Series Python教程74&#xff1a;Pandas中DataFrame数据创建方法及缺失值与重复值处理 Pandas数据化分析&#xff0c;DataFrame行列索引数据的选取&#xff0c;增加&#xff0c…

【RT-DETR有效改进】UNetv2提出的一种SDI多层次特征融合模块(细节高效涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。包括皮肤…

数据库管理-第144期 深入使用EMCC-01(20240204)

数据库管理144期 2024-02-04 数据库管理-第144期 深入使用EMCC-01&#xff08;20240204&#xff09;1 用户管理2 配置告警动作3 配置意外事件规则总结 数据库管理-第144期 深入使用EMCC-01&#xff08;20240204&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&am…

redis(6)

文章目录 一、redis clusterRedis Cluster 工作原理Redis cluster 基本架构Redis cluster主从架构Redis Cluster 部署架构说明部署方式介绍 原生命令手动部署原生命令实战案例&#xff1a;利用原生命令手动部署redis cluster 实战案例&#xff1a;基于Redis 5 的redis cluster部…

Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】

文章目录 Matplotlib绘制炫酷柱状图的艺术与技巧1. 簇状柱状图2. 堆积柱状图3. 横向柱状图4. 百分比柱状图5. 3D柱状图6. 堆积横向柱状图7. 多系列百分比柱状图8. 3D堆积柱状图9. 带有误差线的柱状图10. 分组百分比柱状图11. 水平堆积柱状图12. 多面板柱状图13. 自定义颜色和样…

2024.2.5日总结(小程序开发2)

小程序的宿主环境 宿主环境 宿主环境指的是程序运行所必须的依赖环境。 Android系统和iOS系统是两个不同的宿主环境。安卓版的微信App不能再iOS环境下运行。Android是安卓软件的宿主环境&#xff0c;脱离了宿主环境的软件是没有意义的。 小程序的宿主环境 手机微信是小程序…

vue全家桶之状态管理Pinia

一、Pinia和Vuex的对比 1.什么是Pinia呢&#xff1f; Pinia&#xff08;发音为/piːnjʌ/&#xff0c;如英语中的“peenya”&#xff09;是最接近pia&#xff08;西班牙语中的菠萝&#xff09;的词&#xff1b; Pinia开始于大概2019年&#xff0c;最初是作为一个实验为Vue重新…