没有合适的资源?快使用搜索试试~ 我知道了~
对象的函数指针(c++)
5星 · 超过95%的资源 需积分: 50 12 下载量 24 浏览量
2009-07-22
09:33:56
上传
评论
收藏 99KB DOC 举报
温馨提示
试读
7页
对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针对象的函数指针
资源推荐
资源详情
资源评论
引子
标准 中没有真正的面向对象的函数指针。这一点对 来说是不幸的,因为面
向对象的指针(也叫做“闭包()”或“委托( )”)在一些语言中已经证
明了它宝贵的价值。在 中,面向对象的函数指针是 可视
化组建库(,)的基础。而在目前,使“委托”的概念
日趋流行,这也正显示出 这种语言的成功。在很多应用程序中,“委托”简化了松耦合对
象的设计模式 !"#。这种特性无疑在标准 中也会产生很大的作用。
很 遗憾, 中没有“ 委 托” , 它 只 提 供了 成 员 函 数 指 针 ( $
)。很多程序员从没有用过函数指针,这是有特定的原因的。因为函数指针自身
有很多奇怪的语法规则(比如“%&'(和“)'(操作符),而且很难找到它们的准确含义,并且
你会找到更好的办法以避免使用函数指针。更具有讽刺意味的是:事实上,编译器的编写
者如果实现“委托”的话会比他费劲地实现成员函数指针要容易地多!
在这篇文章中,我要揭开成员函数指针那“神秘的盖子”。在扼要地重述成员函数指针
的语法和特性之后,我会向读者解释成员函数指针在一些常用的编译器中是怎样实现的,
然后我会向大家展示编译器怎样有效地实现“委托”。最后我会利用这些精深的知识向你展
示在 编译器上实现优化而可靠的“委托”的技术。比如,在 *)+,)-./,
)-./0++1中对单一目标委托(%)的调用,编译器仅仅生
成两行汇编代码!
函数指针
下面我们复习一下函数指针。在 和 语言中,一个命名为 2$2 的函数
指针指向一个以一个 和一个 '为参数的函数,这个函数返回一个浮点值,声明如
下:3'2$2,'4
55为了便于理解,我强烈推荐你使用 $ 关键字。
55如果不这样的话,当函数指针作为一个函数的参数传递的时候,
55程序会变得晦涩难懂。
55这样的话,声明应如下所示:
$3'6"/,'4
6"/2$24
应注意,对每一个函数的参数组合,函数指针的类型应该是不同的。在 6$
(以下称 67)中,对三种不同的调用方式有不同的类型:22,
22,和22$。如果你的函数指针指向一个型如 32$,'
的函数,这样做就可以了:
2$282$4
当你想调用它所指向的函数时,你可以这样写:
'2$29,:;7:4
你可以将一种类型的函数指针转换成另一种函数指针类型,但你不可以将一个函数指
针指向一个 <'型的数据指针。其他的转换操作就不用详叙了。一个函数指针可以被设
置为 + 来表明它是一个空指针。所有的比较运算符(88,=8,>,&,>8,&8)都可以使
用,可以使用“88+(或通过一个显式的布尔转换来测试指针是否为空()。
在 语言中,函数指针通常用来像 ? 一样将函数作为参数,或者作为 @A
系统函数的回调函数等等。函数指针还有很多其他的应用。函数指针的实现很简单:它们
只是“代码指针()”,它们体现在汇编语言中是用来保存子程序代码的首地
址。而这种函数指针的存在只是为了保证使用了正确的调用规范。
成员函数指针
资源评论
- 丛林隐士2012-09-03对于指针的解释很到位, 很容易理解。
- superastar2012-06-06说明了函数指针和成员函数指针的区别和实现。
weihc_2008
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功