(10.2)函数的设计之函数模板与库函数

1.函数模板

  • 函数模板(function template) 是一个独立于类型的函数, 可作为一种模式, 产生函数的特定类型版本。
int abs( int x )
{ 
	return x<0?-x:x; 
}
double abs( double x )
{ 	
	return x<0?-x:x; 
}
  • 使用函数模板可以设计通用型的函数, 这些函数与类型无关并且只在需要时自动实例化, 从而形成“批量型” 的编程方式。

函数模板定义的语法形式为:

template<模板形参表>
返回类型 函数名(形参列表)
{
	函数体
}

or
template<模板形参表>返回类型 函数名(形参列表)
{
	函数体
}


eg:
template<typename T>
T abs(T x)
{ 
	return x<0?-x:x; 
}
T代表一种数据类型,描述函数时,用T代表函数类型和数据类型

int main()
{ 
	int n=-5; double d=-5.5;
	
	//n是int的,系统会生成int版本的abs函数
	//double类似
	cout<<abs(n)<<,<<abs(d)<<endl;
	return 0;
}

  • 模板形参表(template parameter list) 是用一对尖括号括< >括起来的一个或多个模板形参的列表, 不允许为空, 形参之间以逗号分隔, 其形式有两种。
①第一种形式(第一种用的多)
typename 类型参数名1,typename 类型参数名2,......

②第二种形式
class 类型参数名1, class 类型参数名2,....
  • eg:
 #include <iostream>
 using namespace std;
 template <typename T> //T表示数据类型
 T add(T a,T b)
 {
 	return a+b;
 }
 
 int main()
 {
	cout<<"int_add="<<add(10,20)<<endl; //生成整型版本的add函数
	cout<<"double_add="<<add(10.2,20.5)<<endl;//生成实型版本的add函数
	cout<<"char_add="<<add('A','\2')<<endl;//生成字符型版本的add函数
	cout<<"int_add="<<add(100,200)<<endl;
	return 0;
 }

2.库函数

  • 所谓库函数是指事先由程序员编制好的函数。

  • 多数情况下, 基于各种理由, 如保护知识产权, 这些库函数仅提供二进制形式的目标代码给调用者链接, 却没有提供源码形式的函数定义。

  • (1) 在程序中添加库函数声明
    多数库函数将自己的函数原型和特殊数据等放在头文件(.h) 中,所以应首先使用文件包含命令将这些头文件包含到程序中。
    例如

欲使用数学库函数, 文件包含命令为:
#include <cmath>
从而使得程序有函数声明, 例如:
y=sin(x);
调用就能够通过编译。
  • (2) 将库函数目标代码连接到程序中。
    在连接时, 例如使用了sin函数, 就必须要有sin函数的实现代码才能生成可执行文件, 否则连接出错。 要将库函数的目标代码能够连接到程序中, 主要是配置好开发环境的相关参数, 然后由连接器处理。
    标准库函数的连接在开发环境中是默认的, 一般可以不用特别设置。
发布了556 篇原创文章 · 获赞 140 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/104161841