• 类模板基本使用


    类模板

    语法:template <T…> 紧跟着是类

    区别:

    • 与函数模板区别,可以有默认类型参数
    • 函数模板可以进行自动类型推导,而类模板不可以

    类模板中的成员函数 一开始不会创建出来,而是在运行时才去创建

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    using namespace std;
    
    //类模板
    template<class NameT, class AgeT=int> //类模板可以有默认类型
    class Person
    {
    public:
        Person(NameT name, AgeT age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
    
        NameT m_Name;
        AgeT m_Age;
    };
    void test01()
    {
        //1.类模板不支持 自动类型推导
        //Person p("孙悟空", 100);       //error
        //2.显示类型指定
        Person<string, int> p("孙悟空", 100);
    }
    
    int main()
    {
        test01();
        system("Pause");
        return 0;
    }

    成员函数运行时才创建

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    using namespace std;
    
    //类模板
    template<class NameT, class AgeT=int> //类模板可以有默认类型
    class Person
    {
    public:
        Person(NameT name, AgeT age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
    
        NameT m_Name;
        AgeT m_Age;
    };
    void test01()
    {
        //1.类模板不支持 自动类型推导
        //Person p("孙悟空", 100);       //error
        //2.显示类型指定
        Person<string, int> p("孙悟空", 100);
    }
    
    class Person1
    {
    public:
        void showPerson1()
        {
            cout << "Person1显示" << endl;
        }
    };
    class Person2
    {
    public:
        void showPerson2()
        {
            cout << "Person2显示" << endl;
        }
    };
    template<class T>
    class myClass
    {
    public:
        T obj;
        void func1()
        {
            obj.showPerson1();
        }
        void func2()
        {
            obj.showPerson2();
        }
    };
    //成员函数 一开始不会创建出来 而是运行时才会被创建出来
    void test02()
    {
        myClass<Person1> m; //此时运行 不会报错
        m.func1();          //正常
        //m.func2();          //error  只有运行到这才会报错
    }
    int main()
    {
        test02();
        //test01();
        system("Pause");
        return 0;
    }

    结果:

    调用func2时才会报错

     结果:

  • 相关阅读:
    python学习笔记(二十):异常处理
    python学习笔记(十九)面向对象编程,类
    发邮件
    网络编程
    python学习笔记(十八)python操作excel
    BZOJ 3413 匹配 (后缀自动机+线段树合并)
    BZOJ 2555 SubString (后缀自动机+LCT)
    BZOJ 1396 识别子串 (后缀自动机+线段树)
    BZOJ 2780 Sevenk Love Oimaster (后缀自动机+树状数组+dfs序+离线)
    BZOJ 3998 [TJOI2015]弦论 (后缀自动机)
  • 原文地址:https://www.cnblogs.com/yifengs/p/15180765.html
Copyright © 2020-2023  润新知