类模板

类模板和函数模板的定义和使用类似。

类模板用于实现类所需求数据的类型参数化;

类模板在表示如数组、表、图等数据结构特别重要,这些数据结构的表示和算法不受所包含的元素类型影响;

 

单个类模板语法:

#include<iostream>
using namespace std;
//模板类 类型参数化
template <typename T>
//此时类A为模板类
class A {
public:
    A(T a = 0)
    {
        this->a = a;
    }
public:
    void printA()
    {
        cout << "a: " << a << endl;
    }
private:
    T a;
};


int main()
{
    //模板类本身是类型化的======具体的类=========>具体的变量
    A<int>a1(11); //模板类是抽象的====》需要进行具体类型
    a1.printA();
    system("pause");
    return 0;
}

类模板做函数参数:

void UseA(A<int>&a)
{
    a.printA();
}

模板类派生普通类

模板类的派生 必须具体化模板类.原理:c++编译器需要知道父类的数据类型具体是什么样子的。

要知道父类所占的内存大小是多少,只有数据类型固定下来,才知道如何分配内存。

class B : public A<int> //模板类的派生 必须具体化模板类.原理:c++编译器需要知道父类的数据类型具体是什么样子的
{                        //要知道父类所占的内存大小是多少,只有数据类型固定下来,才知道如何分配内存
public:
    B(int a = 10, int b = 20) : A<int>(a)
    {
        this->b = b;
    }
    void printB()
    {
        cout << "a: " << a << " b: " << b << endl;
        
    }

private:
    int b;
};
int main()
{

    B b1(1,2);
    b1.printB();
    system("pause");
    return 0;
}

模板类派生模板类

//从模板类派生模板类
template<typename T>
class C : public A<T>
{
public:
    C(T c, T a) : A<T>(a)
    {
        this->c = c;
    }
    void printC()
    {
        cout << "c: " << c << endl;
    }
protected:
    T c;
};
void main()
{
    C<int> c1(1, 2);
    c1.printC();


    system("pause");
}

 

posted on 2020-09-25 16:39  龑覭  阅读(129)  评论(0编辑  收藏  举报