• 函数模板和类模板实例介绍


    模板:将类型定义为参数,实现类型参数化,实现代码重用。

    一、函数模板

    格式:
    (template-声明模板的关键字,class修饰形参类型)
    template typename T>
    返回类型 函数名(形参){函数体}
    实现函数接收任意类型参数

    #include
    using namespace std;
    template <class T>//定义模板:T类型表示任意类型
    T min1(T x,T y)//该函数可接收任意参数类型 
    {
    	return (x<y)?x:y;
    }
    int main()
    {
    	int a=2,b=10;
    	double c=1.5,d=5.6;
    	cout<<"较小整数:"<<min1(a,b)<<endl;
    	cout<<"较小实数:"<<min1(c,d)<<endl;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行结果
    在这里插入图片描述
    注:定义函数名时注意不要与标准命名空间(std)中的函数名同名,否则会报错!!!

    二、类模板

    格式:
    (template-声明模板的关键字,class修饰形参类型)
    template
    class 类名{类的声明}
    实现类接收任意类型参数

    #include
    using namespace std;
    template <class T1,class T2>//定义一个模板:定义两个任意类型 
    class myClass{//类中定义两个任意类型参数 
    	private:
    		T1 t1;T2 t2;
    	public:
    		myClass(T1 a,T2 b):t1(a),t2(b){}//构造函数 
    		void show(){
    			cout<<"t1="<<t1<<"\tt2="<<t2<<endl;
    		}
    };
    int main()
    {
    	myClass<int,int> m1(3,5);//类模板实例化时要指明类模板类型 
    	myClass<char,char> m2('s','w');
    	myClass<double,char> m3(1.3,'e');
    	m1.show();m2.show();m3.show();
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    运行结果
    在这里插入图片描述
    注:类模板实例化时要指明类模板类型

    若函数定义在类外部,则需要定义多个模板

    #include
    using namespace std;
    template <class T1,class T2>//定义一个模板:定义两个任意类型 
    class myClass{//类中定义两个任意类型参数 
    	private:
    		T1 t1;T2 t2;
    	public:
    		myClass(T1 a,T2 b);//构造函数 
    		void show(){
    			cout<<"t1="<<t1<<"\tt2="<<t2<<endl;
    		}
    };
    template <class T1,class T2>//需要再定义一个模板,否则模板会丢失  
    myClass<T1,T2>::myClass(T1 a,T2 b):t1(a),t2(b){}//定义构造函数 
    int main()
    {
    	myClass<int,int> m1(3,5);//类模板实例化时要指明类模板类型 
    	myClass<char,char> m2('s','w');
    	myClass<double,char> m3(1.3,'e');
    	m1.show();m2.show();m3.show();
     } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    经验篇:大数据常用工具集合
    数据类型详解
    Hadoop集群动态扩容、缩容
    一文打尽知识图谱(超级干货,建议收藏!)
    阿里P7程序员斩获offer感言:突破Java瓶颈期我用了这一套路线图
    Hi3861 业务代码编写框架
    Vue.js 中的API接口封装实战与详解
    js单行代码------随机数
    DialogFragment方便地完成自定义弹窗
    AS/400连接字符串
  • 原文地址:https://blog.csdn.net/2301_76371717/article/details/133973557