C++模板

C++中模板的介绍:

1、模板的概念

模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模板可以分为两类,一个是函数模板,另一个就是类模板。

2、函数模板的写法

函数模板的一般形式如下:

Template <class或者也可以用typename T>

返回类型 函数名(形参表)
{//函数定义体 }

说明:template是声明模板的关键字,表示声明了一个模板,关键字class不能省略。

例如:

template < class T>
T Sum(T x, T y)
{ return x + y; }
相当于同时声明了许多名字都为Sum的函数,但是输入输出的数据类型未定,可以是int、float、double、或char,真正的函数定义要由编译器判定实际使用的数据类型后才完成。

另外,函数模板常常可以用来取代函数的重载,例如:

template < class T>
T Abs(T x){ return (x>0)?x:-x; }
相当于同时定义了

int Abs(int x){ return (x>0) ? x : -x; }
double Abs(double x){ return (x>0) ? x : -x; }
float Abs(float x){ return (x>0) ? x : -x; }
3个函数。
****************

看下例:

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
//声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,
//T可以被任何字母或者数字代替。
template <class T>
T min(T x, T y)
{
	return(x < y) ? x : y;
}

void main()
{
	int n1 = 2, n2 = 10;
	double d1 = 1.5, d2 = 5.6;
	cout << "较小整数:" << min(n1, n2) << endl;
	cout << "较小实数:" << min(d1, d2) << endl;
	system("PAUSE");
}

程序分析:调用min(n1,n2)即实例化函数模板中T的类型为int型;同理min(d1,d2)实例化为double型,求出d1,d2的最小值。

3、类模板的写法

定义一个类模板

Template < class或者也可以用typename T >
class类名{
//类定义......
};
说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。

例子:

// Header.h

<pre name="code" class="cpp">#ifndef ClassTemplate_HH
#define ClassTemplate_HH

template<typename T1, typename T2>
class myClass{
private:
	T1 I;
	T2 J;
public:
	myClass(T1 a, T2 b);//Constructor
	void show();
};
//这是构造函数
//注意这些格式
template <typename T1, typename T2>
myClass<T1, T2>::myClass(T1 a, T2 b) :I(a), J(b){}
//这是void show();

template <typename T1, typename T2>
void myClass<T1, T2>::show()
{
	cout << "I=" << I << ", J=" << J << endl;
}
#endif
 

// Test.cpp

// Test.cpp
#include "stdafx.h"
#include <iostream>
#include "Header.h"
using std::cout;
using std::endl;

void main()
{
	myClass<int, int> class1(3, 5);
	class1.show();
	myClass<int, char> class2(3, 'a');
	class2.show();
	myClass<double, int> class3(2.9, 10);
	class3.show();
	system("PAUSE");
}
输出:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值