C++:模板类的继承

模板类的继承

1)类模板 继承 类模板
(2)类模板 继承 模板类
(3)类模板 继承 普通类
(4)普通类 继承 模板类

单模板参数,类模板继承类模板,代码实现

//作为父类
template <typename T>
class People {private:/* data */int age;public:T x;People() {}  // Default constructorPeople(T a) : x(a) {}void myprint(const People<T>& pn);
};template <typename T>
void People<T>::myprint(const People<T>& pn) {cout << "pn.x=" << pn.x << endl;
}template <typename T>
class Man : public People<T> {private:/* data */public:T y;Man() {}  // Default constructorMan(T a) : y(a) {}Man(T a, T b) : People<T>(a), y(b) {}
};void test070802(void) {People<int> p1(10);p1.myprint(p1);Man<int> m1(88, 99);m1.myprint(m1);cout << "m1.x=" << m1.x << endl;cout << "m1.y=" << m1.y << endl;
}

总结:在继承时,相当于用子类的模板参数Tx去实例填充了父类的模板参数Ty
作用:用于构建模板化的类体系,写模板化的大框架

//作为父类
template <typename T>
class People {private:/* data */int age;public:T x;People() {}  // Default constructorPeople(T a) : x(a) {}void myprint(const People<T>& pn);
};template <typename T>
void People<T>::myprint(const People<T>& pn) {cout << "pn.x=" << pn.x << endl;
}template <typename T1>
class Man : public People<T1> {private:/* data */public:T1 y;Man() {}  // Default constructorMan(T1 a) : y(a) {}Man(T1 a, T1 b) : People<T1>(a), y(b) {}
};void test070802(void) {People<int> p1(10);p1.myprint(p1);Man<int> m1(88, 99);m1.myprint(m1);cout << "m1.x=" << m1.x << endl;cout << "m1.y=" << m1.y << endl;
}

多模板参数

//作为父类
template <typename T1, typename T2>
class People {private:/* data */int age;public:T1 x1;T2 x2;People() {}  // Default constructorPeople(T1 a, T2 b) : x1(a), x2(b) {}void myprint(const People<T1, T2>& pn);
};template <typename T1, typename T2>
void People<T1, T2>::myprint(const People<T1, T2>& pn) {cout << "myprint.x1=" << pn.x1 << endl;cout << "myprint.x2=" << pn.x2 << endl;
}template <typename T9, typename T8>
class Man : public People<T8, T9> {  //报错 1和 2 一起就不会报错// class Man : public People<T9, T8> { // 3private:/* data */public:T9 y1;T8 y2;Man() {}  // Default constructorMan(T9 a) : y1(a) {}Man(T9 a, T8 b): People<T8, T9>(b, a), y1(b), y2(a) {}  //报错 2 和 1 一起就不会报错// Man(T9 a, T8 b) : People<T9, T8>(b, a), y1(b), y2(a) {}//OK 4 和 3 一起就不会报错// Man(T9 a, T8 b) : People<T9, T8>(a, b), y1(b), y2(a) {}  // OK 5 和 3 一起就不会报错
};void test070802(void) {Man<int, double> m1(66.66, 99.99);cout << "m1.x1=" << m1.x1 << endl;cout << "m1.x2=" << m1.x2 << endl;cout << "m1.y1=" << m1.y1 << endl;cout << "m1.y2=" << m1.y2 << endl;Man<double, double> m2(66, 99.99);cout << "m2.x1=" << m2.x1 << endl;cout << "m2.x2=" << m2.x2 << endl;cout << "m2.y1=" << m2.y1 << endl;cout << "m2.y2=" << m2.y2 << endl;
}

本质上要理解模板的对应关系

类模板 继承 模板类(类的成员函数/变量有使用模板)
类模板 继承 普通类 (类的成员函数和变量都没有使用模板)
普通类 继承 模板类

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

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

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

相关文章

【思科】链路聚合实验配置和背景

【思科】链路聚合实验配置和背景 背景链路聚合基本概念链路聚合聚合接口 思科链路聚合协议01.PAgP协议02.LACP协议 思科链路聚合模式LACP协议模式PAgP协议模式ON模式 实验准备配置二层链路聚合LACP协议模式SW1SW2PC1PC2查看LACP聚合组建立情况查看LACP聚合端口情况查看逻辑聚合…

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(三)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 DHTMLX Gantt是一个高度可定制的工具&#xff0c;可以与项目管理应用程序所需的其他功能相补充。在本文中您将学习如何使用自定义上…

设计模式——模版方法和策略模式

前言 作为一名资深CV工程师&#xff0c;学会为自己减少工作量乃重中之重。但只是一味地CV&#xff0c;只会因为劣质代码而让自己的工作量加倍&#xff0c;为了将来不被繁重的维护工作而打扰自己的休息日&#xff0c;为了更好的节能&#xff0c;学习设计模式&#xff0c;刻不容缓…

数据结构_Map和Set

目录 一、搜索模型 二、Map 2.1 Map.Entry 2.2 Map 方法 2.3 Map 注意事项 三、Set 3.1 Set 方法 3.2 Set 注意事项 四、哈希表 4.1 哈希表 4.2 冲突 4.3 哈希函数设计 4.4 闭散列 4.5 开散列/哈希桶 总结 【搜索树】 二叉搜索树又称二叉排序树&#xff0c;它或…

spring-boot 整合 redisson 实现延时队列(文末有彩蛋)

应用场景 通常在一些需要经历一段时间或者到达某个指定时间节点才会执行的功能&#xff0c;比如以下这些场景&#xff1a; 订单超时提醒收货自动确认会议提醒代办事项提醒 为什么使用延时队列 对于数据量小且实时性要求不高的需求来说&#xff0c;最简单的方法就是定时扫描数据…

使用Pandas读取Excel文件将特定列转成str格式方法汇总

文章目录 读取Excel文件并确保列为字符串类型使用 dtype 参数使用 converters 参数 读取Excel文件的正确拼写示例&#xff1a;读取Excel文件并过滤包含特定值的行详细解释 读取Excel文件并确保列为字符串类型 正确的方法是使用 pd.read_excel 函数&#xff0c;并指定 dtype 或…

Webserver笔记

代码随想录的项目 LogStream.h // 返回data_ char数组的数据末尾地址 const char* end() const { return data_ sizeof data_; }Logging.cpp //定义一个 struct timeval 类型的变量 tv&#xff0c;用于存储当前的时间信息。 //定义一个 time_t 类型的变量 time&#xff0c;用…

语音合成-TTS文字转语音(专业版)

语音合成-TTS文字转语音(专业版) 一、工具简介 *使用强大的智能AI语音库&#xff0c;合成独具特色接近真人语音的朗读音频。 *使用极具表现力和类似人类的声音&#xff0c;使文本阅读器和已启用语音的助理等方案栩栩如生。 *用途&#xff1a;这个语音工具&#xff0c;不仅可…

【C语言初阶】C语言数组基础:从定义到遍历的全面指南

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言函数 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀数组 &#x1f4d2;1. 什么是数组…

HTTP状态码(HTTP Status Code)讲解

HTTP状态码&#xff08;HTTP Status Code&#xff09;是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由RFC 2616规范定义&#xff0c;并得到多个RFC规范的扩展。状态码告知客户端请求的处理结果及状态&#xff0c;有助于开发者定位和解决问题。 HTTP状态码分为…

HTTP请求与响应:Python爬虫技术解析

引言 在Web开发和数据抓取中&#xff0c;理解HTTP协议是至关重要的。HTTP&#xff08;超文本传输协议&#xff09;是用于从网络传输超文本到本地浏览器的标准协议。它定义了客户端与服务器之间请求和响应的格式。本文将从HTTP请求和响应的基本结构开始&#xff0c;逐步深入到如…

【C++】学习笔记——AVL树

文章目录 十六、AVL树1. AVL树的概念2. AVL树节点的定义3. AVL树的插入4. AVL树的旋转5. AVL树的验证6. 完整代码测试7. AVL树的性能 未完待续 十六、AVL树 1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&…

【机器学习】无监督学习和自监督学习

1. 什么是机器学习 机器学习是一种使计算机系统能够从数据中学习并做出预测或决策的技术和科学领域。它不需要显式地编程来执行特定任务&#xff0c;而是通过使用算法来分析数据和识别模式&#xff0c;以此“学习”如何做出准确的预测或决策。 以下是机器学习的几个关键点&…

【JS逆向课件:第七课:模块与包】

模块与包 模块 模块介绍 在计算机程序的开发过程中&#xff0c;随着程序代码越写越多&#xff0c;在一个文件里代码就会越来越长&#xff0c;越来越不容易维护。 为了编写可维护的代码&#xff0c;我们把很多函数分组&#xff0c;分别放到不同的文件里&#xff0c;这样&…

前端基础之JavaScript学习——函数的使用

大家好我是来自CSDN的前端寄术区博主PleaSure乐事&#xff0c;今天我们继续有关JavaScript的学习&#xff0c;使用的编译器为vscode&#xff0c;浏览器为谷歌浏览器。 函数的声明与使用 声明 在JavaScript当中函数的声明和其他语言类似&#xff0c;使用如下格式即可声明&…

实战篇(十):使用Processing创建可爱花朵:实现随机位置、大小和颜色的花朵

使用Processing创建可爱花朵 0.效果预览1. 引言2. 设置Processing环境3. 创建花朵类4. 实现花瓣绘制5. 绘制可爱的笑脸6. 鼠标点击生成花朵7. 完整代码8. 总结与扩展0.效果预览 在本教程中,我们将使用Processing编程语言来创建一个可爱的花朵生成器。通过封装花朵为一个类,并…

大语言模型-检索测评指标

1. MRR &#xff08;Mean Reciprocal Rank&#xff09;平均倒数排名&#xff1a; 衡量检索结果排序质量的指标。 计算方式&#xff1a; 对于每个查询&#xff0c;计算被正确检索的文档的最高排名的倒数的平均值&#xff0c;再对所有查询的平均值取均值。 意义&#xff1a; 衡量…

Context使用

Context API 是 React 提供的一种用于跨组件层级共享数据的方法&#xff0c;它可以用来实现兄弟组件之间的通信。通常情况下&#xff0c;兄弟组件之间的通信需要通过它们的共同父组件来实现&#xff0c;而 Context API 则可以帮助我们避免将数据逐层传递到每一个中间组件。 实…

京准:GPS北斗卫星授时信号安全隔离防护装置

京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 1、主要特点 ★信号加固功能&#xff1a; GPS/BDS单系统信号拒止情况下&#xff08;包含受到GPS L1欺骗干扰、GPS L1压制干扰、BDS B1欺骗干扰、BDS B1压制干扰&…

【C++】类和对象(下):初始化列表、类型转换、友元

目录 一.初始化列表 二.类型转换 三.static成员 四.友元 五.内部类 六.匿名对象 一.初始化列表 之前在实现构造函数的时候&#xff0c;初始化成员变量主要是使用函数体内赋值的方法&#xff0c;构造函数初始化还有另外一种方式&#xff1a;初始化列表。使用方式是以一个…