C++中template(模版)的使用

        我们在编程的时候总是会遇到一些类似的模块,只是模块中的形参的数据类型不同,导致我们要不断的去更改模块的。这里就涉及到重载的知识点了。例如以下的几种情况:

//函数1.

int max(int x,int y);
{return(x>y)?x:y ;}

//函数2.
float max( float x,float y){
return (x>y)? x:y ;}

//函数3.
double max(double x,double y)
{return (c>y)? x:y ;}
       这时候,C++中的模版(template)就很好的为我们提供了解决方案。运用模版,我们只需要在使用时,再将数据类型定义上去就可以使用了,不用大费周折的不同的数据类型都得去写一个模块。

        首先,我们得自己写一个模版的头文件。模版的格式很复杂,有点难记。但没关系,我们一步步来。下面给出头文件的代码:

#ifndef TemplateClass_H_
#define TemplateClass_H_
template <class A, class B> class myClass{        //定义一个类模版  
private:
	A X;
	B Y;
public:
	myClass(A X, B Y);               //初始化模块,初始化X,Y
	void output();
	A max();
};

template <class A,class B> myClass<A,B>::myClass(A a,B b):X(a),Y(b){}         //初始化X,Y

//注意下面标红的数据类型,这是为了说明函数的数据类型
template<class A, class B> void myClass<A, B>::output() {                     //输出X,Y
	cout << "X:" << X << endl << "Y:" << Y << endl;
}

template<class A,class B> A myClass<A, B>::max() {                           //得到X,Y中最大的一个值
	return X > Y ? X : Y;
}

#endif // !TemplateClass_H_
       1.类模版的定义

我们把模版的定义拆解来看

template <class A, class B> class myClass{
private:
public:
}
可以将template<class或者typename  A>  class  类名{}看成

大前提()class  类名{执行方案}

2.类中函数模块的定义

在类模版中,不可避免的要用到函数模块。这是我们便要定义函数了。

void output();
template<class A, class B> void myClass<A, B>::output() {                     //输出X,Y
	cout << "X:" << X << endl << "Y:" << Y << endl;
}

按照上面的方法,将函数定义看作

大前提()返回类型 类名<>::函数模块名(形参){函数体}

最后,通过源程序检查是否成功

#include<iostream>
#include"Template.h"
using namespace std;
void main() {
	myClass<double, int>class1(2.9, 3);
	class1.output();
	myClass<int, int>class2(10, 20);
	cout << class2.max() << endl;
	system("pause");
}
运行结果如图,成功







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值