C++調用成員函數指針傳遞this參數


成員函數指針,顧名思義,就是函數指針,不過這個函數不是全局函數,而是一個類的成員函數。

#include <iostream>
using namespace std;
class A {
public:
    void seta(int i) {
        a = i;
    }
    void print() {
        cout << a;
    }
    int a;
};
typedef void (A::*Method)(int);
void call(A *self, Method m) {
    (self->*m)(5);
    self->print();
}
int main(int argc, char *argv[]) {
    A a;
    call(&a, &A::seta);
    return 0;
}

比如上面這段代碼中,A::seta就是成員函數。

(動態)成員函數和全局函數本質上並無不同,都是函數代碼所在的內存地址。不同的是在調用時必須傳遞this指針,比如你可以這樣調用a.seta(0),也可以這樣調用((A *)0)->seta(0)

重定義成員函數類型的語法為:

typedef 返回值類型 (類名::*新的類型)(成員函數參數列表)

調用成員函數指定任意this的語法為:

(賊死->*成員函數指針)(參數)

感謝 http://www.cnblogs.com/qq78292959/archive/2012/10/10/2719155.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM