zoukankan      html  css  js  c++  java
  • 类模板与派生

    概述

    模板也可以继承。分为以下几种:

    • 类模板从类模板派生
    • 类模板从模板类派生
    • 类模板从普通类派生
    • 普通类从模板类派生

    1、类模板从类模板派生

    //类模板A
    template <class T1,class T2>
    class A {
    	T1 v1; T2 v2;
    };
    //由类模板A派生的类模板B
    template <class T1,class T2>
    class B:public A<T2,T1> {//模板类A派生出模板类B。则,模板类A的参数也由模板类B的参数确定。
    	T1 v3; T2 v4;
    };
    //由类模板B派生的类模板C
    template <class T>
    class C:public B<T,T>{
    	T v5;
    };
    
    int main()
    {
    	B<int,double> obj1;
    	C<int> obj2;
    	return 0;
    }
    
    //生成的模板类:
    class B<int,double>:
    public A<double,int>
    {
    	int v3; double v4;
    };
    
    class A<double, int>
    {
    	double v1; int v2;
    }
    

    2、类模板从模板类派生

    template <class T1,class T2>
    class A {
    	T1 v1; T2 v2;
    };
    template <class T>
    class B:public A<int,double> {
    	T v;
    };
    int main() {
    	B<char> obj1; //自动生成两个模板类: A<int,double> 和 B<char>
    	return 0;
    }
    
    

    区分清楚,类模板由类模板派生,类模板由模板类派生:

    • 类模板由模板类派生的话,在使用子类模板时,父类类模板的参数时确定了的,也就是产生了一个模板类,只是子类的参数还不确定。因此派生出来的仍是个模板。
    • 类模板由类由类模板派生,在使用模板之前,子类模板和父类模板的参数都还没确定,但是子类模板和父类模板参数最终都由子类模板的参数列表确定。

    3、 类模板从普通类派生

    //普通类
    class A {
    	int v1;
    };
    //由普通类派生的模板诶
    template <class T>
    class B:public A {//所有从B实例化得到的类, 都以A为基类
    	T v;
    };
    
    int main() {
    	B<char> obj1;
    	return 0;
    }
    

    4、普通类从模板类派生

    template <class T>
    class A {
    	T v1;
    	int n;
    };
    
    class B:public A<int> {
    	double v;
    };
    
    int main() {
    	B obj1;
    	return 0;
    }
    
  • 相关阅读:
    (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
    (转)Elasticsearch分析聚合
    搜索引擎-倒排索引基础知识(摘自《这就是搜索引擎:核心技术详解》)
    Elasticsearch5.x Head插件安装
    Java开发规范总结
    (转)ElasticSearch Java Api-检索索引库
    QTGraphics-View拖拽以及鼠标指针操作
    Qt Graphics-View的打印功能实现
    Qt使用QPainter绘制矢量图并保存为svg文件
    QT制作一个位图画图板程序
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764230.html
Copyright © 2011-2022 走看看