作者kkroy (大猪小猪肉一斤)
看板C_and_CPP
标题Re: [问题] 求助 class 内的function pointer用法
时间Thu Sep 3 00:24:54 2009
很感谢QQ29为我解答,不过有些细节我还是没有搞懂,希望大家指点指点。
: #include <iostream>
: using namespace std;
: class A;
: typedef void(A::*PTR)(int,int);
其实这一行我就没有看很懂,後来爬了文发现QQ大先前也有一样的问题,
typedef int b 的用法 一直以为 可以用 b 来宣告int型态的变数,仅此而已。
後来才知道有 typedef void (*A)(int,int); 的用法,
亦即 以A 来做为 宣告 void(*)(int,int) 型态(function pointer)的变数,
这样理解应该没错吧?
至於先宣告class A 也很好理解,因为A在此时尚未定义,
需要qualify PTR 为其member function。
但是A::* 我就不懂了,A::*PTR的意思是什麽呢?
为什麽我加上A::(*PTR) compiler 不会过?
: class A
: {
: public:
: A(){}
: void QQ(int a,int b){cout<<a<<b;}
: void XD( PTR P){ (this->*P)(5,6);}
↑ 我也不知道为什麽要加上*
:
: void DO()
: {
: XD(&A::QQ);
↑这里我也有问题,QQ已经是class A的成员函数
为何需要qualify呢?
那qualify後为何又要取址呢?
为什麽写成 XD( &(A::QQ) ) Compiler也不会过?
: }
: };
: int main()
: {
: A T;
: T.DO();
: return 0;
: }
: 这样是可以run的 是不是你想要的??
: 有错请各位多指教
: ps.有谁知道我写this->这个 为啥不写会错= = 我想不透
很抱歉,我真的很新,
希望能为小弟解惑,感谢大家!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.144.17
※ 编辑: kkroy 来自: 140.113.144.17 (09/03 00:26)
1F:推 QQ29:不会新阿 这个我也不常用 你仔细看那网页都有写 为啥要this 09/03 00:39
2F:推 QQ29:你下面问的我也很想知道 希望有人回答 09/03 02:55