函数指针(全局函数/类成员函数)和函数对象
2008-02-23 05:34:21来源:互联网 阅读 ()
函数指针(全局函数/类成员函数)、函数对象(Function object)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
一. 函数指针类型为全局函数.
#include "stdafx.h"
#include <iostream>
using namespace std;
class TestAction;
typedef void (*fp)(int);
void Drink(int i)
{
cout<<"No. "<<i<<" drink..."<<endl;
}
void Eat(int i)
{
cout<<"No. "<<i<<" eat..."<<endl;
}
class TestAction
{
public:
fp testAct;
void TestAct(int i)
{
if (testAct != NULL)
{
testAct(i);
}
}
};
int main(int argc, char* argv[])
{
TestAction doact;
doact.testAct = &Drink;
doact.TestAct(0);
doact.TestAct(1);
doact.TestAct(2);
doact.testAct = &Eat;
doact.TestAct(0);
doact.TestAct(1);
doact.TestAct(2);
return 0;
}
二. 函数指针类型为类成员函数.
#include "stdafx.h"
#include <iostream>
using namespace std;
class Action;
class TestAction;
// 函数指针类型为类 Action 的成员函数
typedef void (Action::*fp)(int);
class Action
{
public:
void Drink(int i)
{
cout<<"No. "<<i<<" drink..."<<endl;
}
void Eat(int i)
{
// 本文转自 C Builder 研究 - http://www.ccrun.com/article.asp?i=1005&d=sc37og
cout<<"No. "<<i<<" eat..."<<endl;
}
};
class TestAction
{
public:
// 定义一个函数指针
fp testAct;
//Action 对象实例 , 该指针用于记录被实例化的 Action 对象
Action * pAction;
void TestAct(int i)
{
if ((pAction != NULL) && (testAct != NULL))
{
// 调用
(pAction->*testAct)(i);
}
}
};
int main(int argc, char* argv[])
{
Action act;
TestAction doact;
doact.pAction = &act;
doact.testAct = Action::Drink;
doact.TestAct(0);
doact.TestAct(1);
doact.TestAct(2);
doact.testAct = Action::Eat;
doact.TestAct(0);
doact.TestAct(1);
doact.TestAct(2);
return 0;
}
三. 函数对象 (Function object)
#include "stdafx.h"
#include <iostream>
#include <functional>
using namespace std;
class Action;
class Drink;
class Eat;
class TestAction;
class Action
{
public:
int operator()(int i)
{
Act(i);
return i;
}
virtual void Act(int i) = 0;
};
class Drink : public Action
{
void Act(int i)
{
cout<<"No. "
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash