当类模板碰到继承时,需要主义以下几点:

    • 当子类继承的父类是一个类模板是,子类在声明的时候,要制定出父类中T的类型
    • 如果不指定T的类型,编译器无法给子类分配内存
    • 如果想灵活制定出父类中T的类型,子类也需要称为模板
      1. template <class T>
      2. class Base {
      3. T m;
      4. };
      5. class Son :public Base {
      6. };
      这种清空无法继承,因为编译器不知道父类的数据类型,无法进行下去。
      1. template <class T>
      2. class Base {
      3. T m;
      4. };
      5. class Son :public Base <int>{ //增加int后识别出T是int类型,但这样会限制父类的数据类型,只能为T
      6. };
      如果子类也是个类模板,那么将会更灵活
      1. template <class T>
      2. class Base {
      3. T m;
      4. };
      5. class Son1 :public Base <int>{
      6. };
      7. template <class T1,class T2> //S2列表说明T1是int类型,T2是char类型,父类的T也是T2也是char
      8. class Son2 :public Base <T2> {
      9. T1 obj;
      10. };
      11. void example() {
      12. Son2<int, char>S2;
      13. }