七、类模板

类模板

一、程序实例

和函数模板一样,类模板也有相同的功能,这里直接贴代码:

template <class T1, class T2>
class Map
{
    public:
        T1 key;
        T2 value;
        bool operator< (const Map<T1, T2> &m) const;
        template <class T>
        void printT(T t) {  cout<<t<<endl; } //类模板里可以有函数模板
};

template <class T1, class T2>
bool Map<T1, T2>::operator<(const Map<T1, T2> &m) const
{
    return value<m.value;
}

int main()
{
    Map<string, int> m1, m2;

    m1.key = "key";
    m1.value = 1;

    m2.key = "key";
    m2.value = 2;

    if(m1<m2) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;

    m1.printT(3);

    return 0;
}

二、模板类

编译器由类模板生成类的过程叫类模板的实例化。编译器自动用具体的数据类型,替换类模板中的类型参数,生成模板类的代码。

由类模板实例化得到的类叫模板类,为类型参数指定的数据类型不同,得到的模板类不同,同一个类模板的两个模板类是不兼容的。

类模板的 “<类型参数表>” 中可以出现非类型参数。

三、类模板与继承

  1. 类模板可以派生出类模板
  2. 模板类 (即类模板中类型/非类型参数实例化后的类)可以派生出类模板
  3. 普通类可以派生出类模板
  4. 模板类可以派生出普通类

四、小结

关键代码如下:

template <class T1, class T2>
class Map
{
    public:
        T1 key;
        T2 value;
        template <class T>
        void printT(T t) {  cout<<t<<endl; }
};
Map<string, int> m1, m2; //定义变量

你可能感兴趣的:(C++,Class,类模板)