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

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

一、函数模板

格式:

(template-声明模板的关键字,class修饰形参类型)

template <class / typename T>

返回类型 函数名(形参){函数体}

实现函数接收任意类型参数

cpp 复制代码
#include<iostream>
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;
 }

运行结果

注:定义函数名时注意不要与标准命名空间(std)中的函数名同名,否则会报错!!!

二、类模板

格式:

(template-声明模板的关键字,class修饰形参类型)

template <class / typename T>

class 类名{类的声明}

实现类接收任意类型参数

cpp 复制代码
#include<iostream>
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();
 } 

运行结果

注:类模板实例化时要指明类模板类型

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

cpp 复制代码
#include<iostream>
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 小时前
《从C++小白到算法高手:GESP 1—8级成长地图》第一讲:认识GESP——从编程新手到算法探索者
c++·gesp·信息学竞赛·小学生学c++
晴天的雨.9922 小时前
【C++】继承篇
java·开发语言·c++
青少儿编程课堂2 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven2 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
qq_406981032 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
I_belong_to_jesus13 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Rabitebla15 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
码客-ygluu20 小时前
一个通用游戏数据服务器
c++·架构
another heaven20 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论