函数指针 类成员函数指针 类静态成员函数指针 使用实例

来源:互联网 发布:java log4j 配置文件 编辑:程序博客网 时间:2024/06/03 17:14
#include <iostream>using namespace std;using namespace std;void print(){    cout << "Hello" << endl;}class TT{public:    int i;    void print()    {        cout << "hello" << endl;        i = 5;    }    void dod()    {        f2 = &TT::print;        (this->*f2)();    }    static void dd()    {        cout << "Hello dd" << endl;    }    static void ddd()    {        f3 = &dd;        (*f3)();    }    void (*f1)();        //普通指针    void (TT::*f2)();    static void (*f3)();};void (*TT::f3)()= NULL;void (TT::*f4)();int main(){    TT t;    cout<<"测试类外的class函数指针指向类内的函数"<<endl;    f4 = &TT::print;    (t.*f4)();    cout<<"测试类外的class函数指针指向类内的函数--end"<<endl;    cout<<"测试类内的class函数指针指向类内的函数"<<endl;    t.dod();    cout<<"测试类内的class函数指针指向类内的函数--end"<<endl;    //    (t.*fn)();    //    (t.*(TT::fn)();    cout<<"测试类内的clss函数指针指向类内的函数,在类外的用法"<<endl;    t.f2 = &TT::print;    (t.*t.TT::f2)();    (t.*t.f2)();    cout<<"测试类内的函数指针指向类内的函数,在类外的用法--end"<<endl;    cout<<"测试类内的static函数指针指向类内的static函数"<<endl;    TT::ddd();    TT::f3 = &TT::dd;    TT::f3();    cout<<"测试类内的static函数指针指向类内的static函数--end"<<endl;    cout<<"测试类外函数指针指向类内的static函数"<<endl;    void (*f4)() = TT::dd;    f4();    cout<<"测试类外函数指针指向类内的static函数--end"<<endl;    cout << sizeof(TT) << endl;    int *ptr = &t.i;    cout << *ptr << endl;    cout<<"成员函数"<<endl;    int (TT::*pptr) = &TT::i;    cout << t.*pptr << endl;    cout<<"成员函数--end"<<endl;    cout<<"测试类内的普通指针指向类外的函数"<<endl;    t.f1 = print;    t.f1();    cout<<"测试类内的普通指针指向类外的函数--end"<<endl;    cout<<"测试类内的普通指针指向类内的函数"<<endl;    //t.f1 = &TT::print;    //t.f1();    cout<<"这样是不可以的"<<endl;    cout<<"测试类内的普通指针指向类内的函数--end"<<endl;    return 1;}