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

     结果:

  • 相关阅读:
    第10.7节 Python包和子包的定义步骤
    第10.6节 Python包的概念
    第10.5节 使用__all__定义Python模块导入白名单
    第10.4节 Python模块的弱封装机制
    第10.3节 Python导入模块能否取消导入?
    第10.2节 查看导入的Python模块
    第10.1节 Python的模块及模块导入
    第10章 Python的模块和包
    第9.13节 Python文件操作总结
    OpenCV x64 vs2010 下打开摄像头录制视频写成avi(代码为转载)
  • 原文地址:https://www.cnblogs.com/yifengs/p/15180765.html
Copyright © 2011-2022 走看看