当前位置: 首页 > ai >正文

C++模版编程:类模版与继承

当类模版遇到继承时,需要注意以下几点:

  • 当子类继承的父类是一个类模版时,子类在声明的时候,要指定出父类中T的类型
  • 如果不指定,编译器无法给子类分配内存
  • 如果想灵活指定出父类中T的类型,子类也需变为类模版

         因为父类中的一些东西需要继承到子类中,父类中有的成员,子类中也必须有,但是子类也不是一个模版,因此一个子类对象到底占据多少个内存空间,怎么算?算不出来,是因为我确定不出来这个继承的这个东西到底占据了多大的空间,因此发生了继承的时候,我必须指明父类中的T 究竟是什么样的数据类型,才能继承该子类。

#include <iostream>//类模版与继承
template<typename T>
class Base{T m;
};class Son:public Base<int>{//必须要知道父类中T的数据类型才能继承给子类};void test01()
{Son s1;
}int main() {test01();return 0;
}

         但是如果想灵活的指定父类中T的数据类型,子类也需要编程类模版。

//如果想灵活的指定父类中T的数据类型,子类也需要编程类模版
template <typename T1,typename T2>
class Son2:public Base<T2>
{T1 obj;T2 obj2;
};

这里的int和char传给了T1和T2

//如果想灵活的指定父类中T的数据类型,子类也需要编程类模版
template <typename T1,typename T2>
class Son2:public Base<T2>
{T1 obj;
};
void test02()
{Son2<int,char>S2;
}

这里的T1是obj的数据类型,他现在是一个整型int,这个T2给了父类,因此这个T2是m的数据类型,其中这个数据类型是char类型。这样一步一步的成立之后,再继承下来之后,这样他们就能拿到一个父类中的m。

//如果想灵活的指定父类中T的数据类型,子类也需要编程类模版
template <typename T1,typename T2>
class Son2:public Base<T2>
{//写一个构造函数来看一下T1和T2的数据类型public:Son2(){std::cout<< "T1 type: " << typeid(T1).name() << std::endl;std::cout<< "T2 type: " << typeid(T2).name() << std::endl;}T1 obj;
};
void test02()
{Son2<int,char>S2;
}int main() {test02();return 0;
}

这里再运行Son2的时候,其一定会调用自己的构造函数。

最终的结果显示其一个为int型,一个为char型。

总结:父类是一个类模版,子类在继承的时候需要指定出父类中T的数据类型。

http://www.xdnf.cn/news/15285.html

相关文章:

  • 力扣 hot100 Day43
  • 2025.7.13总结
  • 代码部落 20250713 CSP-S复赛 模拟赛
  • 芯片相关必备
  • [附源码+数据库+毕业论文+答辩PPT+部署教程+配套软件]基于SpringBoot+MyBatis+MySQL+Maven+Vue实现的交流互动管理系统
  • 型模块化协作机器人结构设计cad【1张】三维图+设计说明书
  • MCU中的系统控制器(System Controller)是什么?
  • [Rust 基础课程]Hello World
  • CCPD 车牌数据集提取标注,并转为标准 YOLO 格式
  • LAN-401 linux操作系统的移植
  • 【leetcode】字符串,链表的进位加法与乘法
  • Matlab的命令行窗口内容的记录-利用diary记录日志/保存命令窗口输出
  • Linux 系统——管理 MySQL
  • TDengine 使用最佳实践(2)
  • Java集合框架深度解析:LinkedList vs ArrayList 的对决
  • Autotab:用“屏幕录制”训练AI助手,解锁企业级自动化新范式
  • 复习笔记 35
  • CS课程项目设计1:交互友好的井字棋游戏
  • (2)从零开发 Chrome 插件:实现 API 登录与本地存储功能
  • ansible自动化部署考试系统前后端分离项目
  • C++ 强制类型转换
  • 前端性能优化利器:懒加载技术原理与最佳实践
  • QuickUnion优化及Huffman树
  • flask校园学科竞赛管理系统-计算机毕业设计源码12876
  • 使用docker的常用命令
  • 【C++】第十五节—一文详解 | 继承
  • 接入Deepseek的AI截图全能王—截图、录屏剪辑的工具,支持AI OCR / 识图 /翻译
  • Vue3 Diff 算法片段解析:新旧节点队列之乱序比对与更新策略
  • Java使用Langchai4j接入AI大模型的简单使用(五)--流式输出的实现
  • 设计模式之单例模式:深入解析全局唯一对象的艺术