函数模板



#include <iostream>    
#include <iomanip>    
using namespace std;


template<class T>T larger(T a, T b); //function prototype

int main()
{

	cout << endl;
	cout << "Larger of 1.5 and 2.5 is " << larger(1.5, 2.5) << endl;
	cout << "Larger of 3.5 and 4.5 is " << larger(3.5,4.5) << endl;
	int value1 = 35;
	int value2 = 45;
	cout << "Larger of " << value1 << " and " << value2 << " is "
		<< larger(value1, value2)
		<< endl;
	long a = 9;
	long b = 8;
	cout << "Larger of " << a << " and " << b << " is "
		<< larger(a, b)
		<< endl;
	return 0;
}
//template for function to return the larger of two values
template<class T>T larger(T a, T b)
{
		return a > b ? a : b;
}


说明:模板定义的原型(prototype)必须放在调用任何函数实例之前,这个规则与一般的函数相同,因此把模板原型定义为:

template<class T>T larger(T a,T b);  //function prototype

这实际上与模板定义的第一行相同,只是在语句的最后有一个分号。在main函数中,第一次调用函数larger(),如下面的语句所示:

cout << "Larger of 1.5 and 2.5 is " << larger(1.5, 2.5) << endl;

执行这个语句后,编译器会自动创建接受double类型的参数的larger()版本,接着调用该版本,下一个语句也需要接受double类型的larger()版本:

cout << "Larger of 3.5 and 4.5 is " << larger(3.5,4.5) << endl;

编译器将使用前一个语句生成的版本。

下一个使用larger()的语句如下;

int value1 = 35;

int value2 = 45;

cout << "Larger of " << value1 << " and " << value2 << " is "

<< larger(value1, value2)

<< endl;

由于这次要调用参数类型为int的函数,因此创建一个larger()新版本,接受int参数。


larger()函数最后一次调用有两个long类型参数的新版本:

long a = 9;
long b = 8;
cout << "Larger of " << a << " and " << b << " is "
<< larger(a, b)
<< endl;

这次将获得带有两个long类型参数的新版本,这个程序从一段源代码中获得了总共三个不同版本的larger()(其对象代码有所不同)

猜你喜欢

转载自blog.csdn.net/hk121/article/details/80052806