回调函数放在类中跟放在全局位置有什么不同

张亚成 2014-04-25 10:15:59
如题 回调函数放在类中跟放在全局位置有什么不同
...全文
231 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
张亚成 2014-04-28
  • 打赏
  • 举报
回复
引用 10 楼 lm_whales 的回复:
回调函数, 也是有所不同的,比如Windows 窗口过程,这个过程是系统自动调用的。 如果写个类,用非静态成员函数,来实现回调函数的功能,处理起来要麻烦一点; 不过《Windows图形编程》里面介绍了一个方法,可以实现。 当然,也可以参考一下,MFC消息函数的实现方式。 其他回调函数,包括线程过程,窗口枚举函数的回调函数; 这些函数,是应用程序自己调用API,把回调函数和参数一起传递的,因此参数是可控的,方法也比较简单。 用非静态成员函数实现回调函数的功能,然后传递一个全局函数或者静态函数,让他内部调用那个成员函数,参数为类的指针,是很容易实现的。 也就是说,直接用非静态成员函数,实现不了回调函数; 但是,可以采用迂回的方式,间接用非静态成员函数,实现回调函数的功能。 这样虚函数就可以派上用场了,多态就大有用武之地了。
谢谢 !
lm_whales 2014-04-27
  • 打赏
  • 举报
回复
回调函数, 也是有所不同的,比如Windows 窗口过程,这个过程是系统自动调用的。 如果写个类,用非静态成员函数,来实现回调函数的功能,处理起来要麻烦一点; 不过《Windows图形编程》里面介绍了一个方法,可以实现。 当然,也可以参考一下,MFC消息函数的实现方式。 其他回调函数,包括线程过程,窗口枚举函数的回调函数; 这些函数,是应用程序自己调用API,把回调函数和参数一起传递的,因此参数是可控的,方法也比较简单。 用非静态成员函数实现回调函数的功能,然后传递一个全局函数或者静态函数,让他内部调用那个成员函数,参数为类的指针,是很容易实现的。 也就是说,直接用非静态成员函数,实现不了回调函数; 但是,可以采用迂回的方式,间接用非静态成员函数,实现回调函数的功能。 这样虚函数就可以派上用场了,多态就大有用武之地了。
Cw003333 2014-04-25
  • 打赏
  • 举报
回复
类中除了静态函数,普通函数有隐含的this参数,回调函数是给系统调用的,而不是类的实例直接调用,所以不能是类的成员函数。如果你类实例直接调用,就没有必要用回调函数。
张亚成 2014-04-25
  • 打赏
  • 举报
回复
引用 1 楼 s_hhm 的回复:
回调函数不可以放在类中的,只能放在全局.但C++还有一个特性就是static 不会被继承的类中的全局.如果你放在类中就要加static 特性.
你的意思是是说在类中使用STAIC 修饰, 他的继承类中没有这个函数,而且他在猿类中的位置相当于全局函数?
mujiok2003 2014-04-25
  • 打赏
  • 举报
回复
1. 具有类作用域,可以访问不公开的成员。 2. 非静态类成员函数可以动态(virtual)。
s_hhm 2014-04-25
  • 打赏
  • 举报
回复
回调函数不可以放在类中的,只能放在全局.但C++还有一个特性就是static 不会被继承的类中的全局.如果你放在类中就要加static 特性.
Study_Bird 2014-04-25
  • 打赏
  • 举报
回复
还可以什么成protected函数
张亚成 2014-04-25
  • 打赏
  • 举报
回复
引用 6 楼 jay0518 的回复:
其中有一点区别是:作为类成员函数的回调函数可以调用类的其它成员函数以及成员属性。全局函数则没有这个优势。这点区别很明显。
除了这个不同以为还有别的不同吗?
jay0518 2014-04-25
  • 打赏
  • 举报
回复
其中有一点区别是:作为类成员函数的回调函数可以调用类的其它成员函数以及成员属性。全局函数则没有这个优势。这点区别很明显。
张亚成 2014-04-25
  • 打赏
  • 举报
回复
引用 4 楼 s_hhm 的回复:
是这样的.在继承关系中,如果A有三个成员 工x1,x2,x3 且x1为static 成员.A继承的B中就自动会有x1,x2 x3, 这时定义两个对象 A a B b 妙的地方来了 对于对象a与b都可 如果用a对象去更改x2,x3后,你再去关察b对象的x2,x3他们是不会变化的. 但你用a对象去更改 x1 后,你再去关察b对象的x1它也会变化. 从此可以发现,static变量是这个继承体系中的唯一版本所有对象对它的修改都是对本身的修改.,而非static则是复制版本.对象对他们的修改只会影响到该对象,而对别的对象无影响 参考如下代码: #include <iostream> using namespace std; class A { public: int x1; int x2; static int x3; }; int A::x3 = 300; class B : public A { public: private: }; int main() { A a; B b; a.x1= 100; a.x2=100; b.x1=200; b.x2=200; //在这之前对象a与对象b的x3的值为300; a.x3=1000; //在这之前对象a与对象b的x3的值为1000; b.x3=2000; //在这之前对象a与对象b的x3的值为2000; cout<<a.x3; cout<<b.x3; return 0; }
谢谢您的回复,这个知识点在C++课本上有讲过。。。。 我是想问问一个回调函数使用类的成员函数跟使用全局函数有什么不一样 。。。。
s_hhm 2014-04-25
  • 打赏
  • 举报
回复
是这样的.在继承关系中,如果A有三个成员 工x1,x2,x3 且x1为static 成员.A继承的B中就自动会有x1,x2 x3, 这时定义两个对象 A a B b 妙的地方来了 对于对象a与b都可 如果用a对象去更改x2,x3后,你再去关察b对象的x2,x3他们是不会变化的. 但你用a对象去更改 x1 后,你再去关察b对象的x1它也会变化. 从此可以发现,static变量是这个继承体系中的唯一版本所有对象对它的修改都是对本身的修改.,而非static则是复制版本.对象对他们的修改只会影响到该对象,而对别的对象无影响 参考如下代码: #include <iostream> using namespace std; class A { public: int x1; int x2; static int x3; }; int A::x3 = 300; class B : public A { public: private: }; int main() { A a; B b; a.x1= 100; a.x2=100; b.x1=200; b.x2=200; //在这之前对象a与对象b的x3的值为300; a.x3=1000; //在这之前对象a与对象b的x3的值为1000; b.x3=2000; //在这之前对象a与对象b的x3的值为2000; cout<<a.x3; cout<<b.x3; return 0; }

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧