zoukankan      html  css  js  c++  java
  • C++模板template的使用

    模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型

    使用模板的目的就是能够让程序员编写与类型无关的代码。通常有两种形式:函数模板和类模板

    一、函数模板

    函数模板 针对仅参数类型不同的函数,使用函数模板可以使函数的功能不受参数类型的限制

    template<class T> 中的T可以被任意的数据类型替代,template是关键字,尖括号内的是模板形参列表,模板形参列表不能为空

    #include <iostream>
    #include <memory>
    using namespace std;
    template<class T>
    T GetMax(T a,T b)
    {
        return a>b?a:b;
    }
    int main() {
        cout<<GetMax(2,3)<<endl;
        cout<<GetMax(1.66,5.66)<<endl;
        cout<<GetMax('a','p')<<endl;
        cout<<GetMax("string","ss")<<endl;
        return 0;
    }

    二、类模板
    类模板 针对仅数据成员和成员函数类型不同的类。

    #include <iostream>
    #include<string>
    #include <memory>
    using namespace std;
    template<class T>
    class pclass
    {
    public:
        pclass()
        {
    
        };
        ~pclass()
        {
            cout<<"~pclass"<<endl;
        };
        T GetMax(T a, T b)
        {
            return a > b ? a : b;
        }
    private:
    
    };
    int main() {
        pclass<int> p1;
        cout << p1.GetMax(2, 3) << endl;
        pclass<double> p2;
        cout << p2.GetMax(1.66, 5.66) << endl;
        pclass<char> p3;
        cout << p3.GetMax('a', 'p') << endl;
        pclass<string> p4;
        cout << p4.GetMax("string", "ss") << endl;
        return 0;
    }

    也可以通过模板类来初始化类内的成员变量

    #include <iostream>
    #include<string>
    #include <memory>
    using namespace std;
    template<int n,int m>
    class pclass
    {
    public:
        pclass()
        {
            a = n;
            b = m;
        };
        ~pclass()
        {
    
        };
        int GetMax()
        {
            return a > b ? a : b;
        }
    private:
        int a;
        int b;
    };
    int main() {
        pclass<2,3> p1;
        cout << p1.GetMax() << endl;
        return 0;
    }

    三、可变参数模板

    注意的是函数模板和类模板的使用不能混淆,

    函数模板使用是直接传变量值进去,传变量类型会报错

    类模板使用是直接传变量类型,初始化的时候传值进去

    template<class T>
    T GetMax(T a,T b)
    {
        return a>b?a:b;
    }
    
    GetMax(1,2);//正确
    GetMax(int ,int);//错误
    
    template<class T>
    class pclass
    {
        ...
    };
    
    pclass p1<int>;//正确
    pclass p2<2>;//错误
    
    template<int n>
    class pclass
    {
        ...
    };
    
    pclass p1<2>;//正确
    pclass p2<int>;//错误

     模板类的使用不能再main()函数里面,模板类必须是全局变量

  • 相关阅读:
    CF687D Dividing Kingdom II
    图论——EK算法
    P6082 [JSOI2015]salesman
    联合权值——树上问题2014noip
    P2071 座位安排——二分图最大匹配
    匈牙利优化时间戳的正确性
    P1541 乌龟棋——线性动规
    P1858 多人背包
    P3558 [POI2013]BAJ-Bytecomputer——线性动归
    P2303 [SDOI2012] Longge 的问题
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12699257.html
Copyright © 2011-2022 走看看