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

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

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

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

cpp 复制代码
#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的数据类型,子类也需要编程类模版。

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

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

cpp 复制代码
//如果想灵活的指定父类中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。

cpp 复制代码
//如果想灵活的指定父类中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的数据类型。

相关推荐
空中海12 小时前
Docker入门到精通
java·docker·eureka
AI进化营-智能译站12 小时前
ROS2 C++开发系列14-Lambda表达式处理传感器数据流|文件IO保存机器人实验日志
开发语言·c++·ai·机器人
itzixiao12 小时前
L1-067 洛希极限(10分)[java][python]
java·开发语言·算法
java1234_小锋13 小时前
Spring AI 2.0 开发Java Agent智能体 - Spring AI项目调用本地Ollama模型
java·人工智能·spring·spring ai2.0
二哈赛车手13 小时前
新人笔记---多策略搭建策略执行链实现RAG检索后过滤
java·笔记·spring·设计模式·ai·策略模式
PESS ABIN13 小时前
JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
java·tomcat
AI进化营-智能译站13 小时前
ROS2 C++开发系列15-模板实现通用算法|宏定义ROS2调试开关|一次编码适配多平台
java·c++·算法·ai
澈20713 小时前
C++引用与指针:核心区别全解析
开发语言·数据结构·c++
刀法如飞13 小时前
Java数组去重的20种实现方式——指导AI解决不同问题的思路
java·算法·面试
良木生香13 小时前
【C++初阶】STL——Vector从入门到应用完全指南(1)
开发语言·c++·神经网络·算法·计算机视觉·自然语言处理·数据挖掘