游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3664|回复: 5

如何设计这个函数

[复制链接]

13

主题

79

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
发表于 2010-3-9 17:09:00 | 显示全部楼层 |阅读模式
class A
{
public:

Window* pWin;

void Fun(void);
}

pWin是A的成员, 现在要给pWin设置鼠标点击消息,可以这样调用:
pWin->DealMsg(BtnClicked);
BtnClicked是一个函数名, 这个函数的声明形式必须是这样的:
bool BtnClicked(const EventArgs& e);
当鼠标点击后这个函数自动回调

现在我想在BtnClicked中调用A中的Fun(void); 要达到的目的是每个A的对象都调用自己的Fun(void)处理自己对象的数据
该怎么弄?

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2010-3-9 17:54:00 | 显示全部楼层

Re:如何设计这个函数

virtual void Fun(void);

2

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2010-3-9 18:37:00 | 显示全部楼层

Re:如何设计这个函数

Fun是类A的成员函数,而BtnClicked应该是类A以外的一个函数,我看你的问题就是,如何在一个非类A的函数里调用类A的函数吧,那得先得到一个类A的实例对象。或者那个DealMsg支持任意类的成员函数的注册,那就可以直接在里面调用Fun了。如果一个类的不同实例对象的行为不同,则适合使用虚函数,如果所有A对象的Fun都使用相同的算法,就没必要使用虚函数,创建不同的A对象直接调用方法就是了。

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2010-3-23 15:30:00 | 显示全部楼层

Re:如何设计这个函数

相互包含,

class A;
class Window
{
void func(){pa->click();}
A* pa;
};
class A
{
void click(){}
void bn_click(){pwnd->func();}
Window* pwnd;
};

0

主题

21

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2010-3-29 09:51:00 | 显示全部楼层

Re:如何设计这个函数

嗯 不错

13

主题

79

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2010-3-29 17:11:00 | 显示全部楼层

Re:如何设计这个函数

window是第3方库,不能改的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-10 14:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表