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

    引言

    在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下:

     这个函数只支持int参数,那么float、long等怎么办呢,函数重载需要好几个函数,很麻烦,我们可以使用模板

    函数模板

    模板函数定义的一般形式如下所示:

    template <typename 类型占位符>   返回值类型占位符 函数名(参数列表) { 函数的主体 }

    注意:typename等价于class

    #include <iostream>
    
    template<typename  T> void swap(T& t1, T& t2) {  //函数模板的定义
        T tmpT;
        tmpT = t1;
        t1 = t2;
        t2 = tmpT;
    }
    
    
    int main() {
        int num1 = 1, num2 = 2;
        swap<int>(num1, num2);//函数模板的调用
        std::cout << "num1=" << num1 << "," << "num2=" << num2 << std::endl;
        
    
        return 0;
    
    }

    如果函数模板写在不同文件中,在.h文件的尾部要导入.cpp文件

    类模板 

    格式为:

        template<class 形参名,class 形参名,…>
        class 类名{ ... };

    #include <iostream>
    
    //类模板的定义
    template<class T,class T1>
    class A {
    public:
        A(T a, T1 b) :m_i(a), m_f(b) {}
        T m_i;
        T1 m_f;
        void print() {
            std::cout << m_i << std::endl;
            std::cout << m_f << std::endl;
        }
        T print1() {
            return m_i + 100;
        }
    };
    
    
    int main() {
        
        A<int, float> aa(10,55.6);//创建对象
        aa.print();
        int x = aa.print1();
        std::cout << "x=" << x<<std::endl;
          
    
        return 0;
    
    }

    如果在类模板外实现函数体(h和cpp文件分开)时,注意书写格式:

    template<class T,class T1> void A<class T,class T1>::print() { }
    说明:template<class T,class T1> 是模板帽子
       
    A<class T,class T1> 是编译后相应的类名
    
    

    函数模板作为类模板成员

    #include <iostream>
    
    
    template<class T>
    class A {
    public:
        A(T a) :m_i(a){}
        T m_i;
        
        //成员函数模板
        template <class T1>  
        void Func(T1 t) {     
            std::cout << t<<std::endl; 
        }  
        
    };
    
    
    int main() {
        
        A<int> aa(10);
        aa.Func(89.6);  //成员函数模板Func被实例化
             
    
        return 0;
    
    }

  • 相关阅读:
    持续集成概念
    性能测试,负载测试,压力测试有什么区别
    安全测试
    接口测试及常用接口测试工具
    python-Csv 实战
    Python3 + Appium学习链接
    python-Txt实践
    python-ddt实践
    保险--总结
    selenium与页面的交互
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13544109.html
Copyright © 2011-2022 走看看