zoukankan      html  css  js  c++  java
  • 类模板基本使用

    类模板

    语法: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时才会报错

     结果:

  • 相关阅读:
    Symmetric Tree
    Splunk的安装与使用
    【BZOJ2662】【BeiJing wc2012】冻结 分层图 裸的!
    Android NFC近场通信03----读写MifareClassic卡
    IOS把图片做成圆形效果
    【翻译自mos文章】CRS显示 正在执行的db instance 是offline状态
    远程訪问路由器下的mac os(ssh+vnc)
    POJ 2488 A Knight&#39;s Journey
    python 分词计算文档TF-IDF值并排序
    ExcelReader(解析Excel的工具类)
  • 原文地址:https://www.cnblogs.com/yifengs/p/15180765.html
Copyright © 2011-2022 走看看