C++函数mu模板

C++的一个重要的特性之一就是代码重用,为了实现代码重用,代码必须具有通用性,通用代码应不受数据类型的影响,并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计。模板C++支持参数化程序设计的工具,通过它可以实现参数化多态性。参数化多态性,就是将程序所处理的对象的类型参数化,通过参数传递的形式,将一个函数传递给另一个函数的参数,使得一段程序可以处理多种不同类型的对象。

函数模板的定义形式:

template<模板参数表>      //模板参数表适用逗号分隔的模板参数构成,包括class标示符、“类型说明符”标示符、template<参数表>class标示符。

类型名 函数名(参数表)

{

     函数体的定义

}

#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename T>          //定义函数模板
T abs(T x)                    //定义函数模板函数,通过它的参数,我们可以得到该函数的类型和它返回值的类型。
{
 return x<0 ? -x : x;
}
int main()
{
 int n = -5;
 double d = -5.5;
 cout << abs(n) << endl;   //实例化函数模板,该函数模板函数类型为int.
 cout << abs(d) << endl;
 getchar();
 return 0;
}



本程序是清华大学C++语言程序设计9_1的实例。经过调试正确。

#include "stdafx.h"
#include<iostream>
using namespace std;
template<class T>                                                                              //定义函数模板
void outputArray(const T*array, int count)                                         //定义输出函数模板函数,第一个参数为T类型指针即函数模板指针为数组指针,类型为常量,Only output not change。
{
 for (int i=0; i < count; i++)
 {
  cout << array[i] << " ";
  cout << endl;
 }
}

int main()
{
 const int A_COUNT = 8, B_COUNT = 8, C_COUNT = 20;
 int a[A_COUNT] = { 1, 2, 3, 4, 5, 6, 7 };
 double b[B_COUNT] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 };
 char c[C_COUNT] = "Welcome to see you!";
 cout << "a array contains:"<< endl;
 outputArray(a, A_COUNT);                                                              //调用输出函数模板函数,通过其两个实参的传递,实现函数的重载。体现了C++的多样性。
 cout << "b array contains:" << endl;
 outputArray(b, B_COUNT);                                                              //同上。
 cout << "c array contains:" << endl;
 outputArray(c, C_COUNT);
 getchar();
 return 0;
}


如果有错误,欢迎大家指出。

注意:虽然函数模板的使用形式和函数类似,但是二者有本质的不同,主要表现在以下三个方面

1、   函数模板本身在编译时不会产生任何目标代码,只有由模板生成的实例会生成目标代码。就像它是灵魂,但是没有肉体一样。

2、  当函数模板被多个源文件引用时,应当连同函数体一同放在头文件中,而不能像普通函数那样只将声明放在.h文件中。

3、  函数指针也只能指向模板的实例,而不能指向模板本身。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值