您的位置:首页 > 其它

函数指针与模板的通用之处

2015-10-08 10:32 218 查看
要求a与b之和,c与d之差。。。等等,我们可以单独为他们设置一个函数,但是如果函数功能改变,则需要重写,缺少灵活性。而函数指针与模板提供了极大地便利。

一、函数指针

一个函数在编译时被分配一个入口地址,这个入口地址称为函数指针,就如同指针是一个变量的地址一样。函数指针的用途很多,最常用的就是把指针作为参数传递到其他函数。

#include <iostream>

using namespace std;

int add(int x, int y)//求和
{
return (x + y);
}
int sub(int x, int y)//求差
{
return (x - y);
}
void test(int (*p)(int, int), int a, int b)
{//函数指针
int result = (*p)(a, b);
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"result = "<<result<<endl;
}
int main()
{
int a=1, b=2, c=3, d=4;
test(add, a, b);//利用函数指针求和
test(sub, c, d);//利用函数指针求差

return 0;
}


结果:

a = 1
b = 2
result = 3
a = 3
b = 4
result = -1

Process returned 0 (0x0)   execution time : 0.453 s
Press any key to continue.


二、模板

该类程序也可以用静态模板类来实现,解决方法一致。

#include <iostream>

using namespace std;

template <class T>
class Operate
{
public:
static T add(T x, T y)//求和
{
return (x + y);
}
static T sub(T x, T y)//求差
{
return (x - y);
}
};

int main()
{
int a=1, b=2, c=3, d=4;
int x, y;
x = Operate<int>::add(a, b);//////
y = Operate<int>::sub(c, d);//////
cout<<x<<endl<<y<<endl;

return 0;
}


也可以写成先实例化的形式:

#include <iostream>

using namespace std;

template <class T> class Operate
{
public:
static T add(T x, T y)//求和
{
return (x + y);
}
static T sub(T x, T y)//求差
{
return (x - y);
}
};

int main()
{
Operate<int> ope;//实例化
int a=1, b=2, c=3, d=4;
int x, y;
x = ope.add(a, b);//
y = ope.sub(c, d);//
cout<<x<<endl<<y<<endl;

return 0;
}


结果:

3
-1

Process returned 0 (0x0)   execution time : 0.211 s
Press any key to continue.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 模板