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

     结果:

  • 相关阅读:
    (OK) [android-x86-6.0-rc1] grub
    /proc/sys/net/ipv4/conf/*/promote_secondaries
    (OK) Ipsysctl tutorial 1.0.4
    Android Netd ndc (Native Daemon Connector)
    Android Wi-Fi — IP forward — ndc — netd
    Android 网络问题
    有哪些 Android 大牛的 blog 值得推荐?
    Android 4.4 Kitkat 使能有线网络 Ethernet
    IP forwarding failure in android 4.0
    (OK) [android-x86-6.0-rc1] /system/etc/init.sh
  • 原文地址:https://www.cnblogs.com/yifengs/p/15180765.html
Copyright © 2011-2022 走看看