zoukankan      html  css  js  c++  java
  • 类模板

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

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

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

    单个类模板语法:

    #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");
    }
  • 相关阅读:
    刚搬过了,请大家多多支持!!
    [导入]搞到了visual studio 2005 professional edtion
    一些常用的正则表达式
    xinxp的隐藏技巧
    今天领准考证了
    推荐一本.net的好书
    今天装上Linux了
    隐藏在Windows XP中的28个秘密武器
    为 Sharepoint 创建可视的 WebPart
    在 NHibernate 中一切必须是 Virtual 的吗?
  • 原文地址:https://www.cnblogs.com/ymj11/p/13731070.html
Copyright © 2011-2022 走看看