C/C++開發語言系列之20---C++類成員函式指標2
阿新 • • 發佈:2019-02-19
#include <iostream> #include <string> #include <vector> #include <map> using namespace std; class Foo { public: string m_str; Foo() { m_str = ""; } static void testFunc2(int a) { cout<<"Foo:void testFunc2(int a)"<<endl; cout<<a<<endl; } void testFunc4(int a) { cout<<"Foo:void testFunc4(int a)"<<endl; cout<<a<<endl; } static void testFunc5(int a) { cout<<"Foo:void testFunc5(int a)"<<endl; cout<<a<<endl; } void (*pTestFunc5)(int a); void (*pTestFunc6)(int a); }; void (*pTestFunc1)(int a); void (*pTestFunc2)(int a); void (Foo::*pTestFunc3)(int a); void (Foo::*pTestFunc4)(int a); void testFunc1(int a) { cout<<"func1 pointer test"<<endl; cout<<a<<endl; } void testFunc3(int a) { cout<<"func3 pointer test"<<endl; cout<<a<<endl; } void testFunc6(int a) { cout<<"func6 pointer test"<<endl; cout<<a<<endl; } int main(int argc, const char *argv[]) { Foo foo; //foo.test("woo",100); pTestFunc1 = testFunc1; //經常用這個方法 (*pTestFunc1)(1); pTestFunc2=&foo.testFunc2; (*pTestFunc2)(2); //pTestFunc3 = &testFunc3; //編譯器報錯,不可以這麼使用 pTestFunc4 = &Foo::testFunc4; //初始化的時候必須帶有&Foo:: //pTestFunc4(4);//編譯器報錯,不可以這麼使用 //foo.pTestFunc4(4);//編譯器報錯,不可以這麼使用 //foo.*pTestFunc4(4);//編譯器報錯,不可以這麼使用 //foo.(*pTestFunc4)(4);//編譯器報錯,不可以這麼使用 (foo.*pTestFunc4)(4); //正常執行 foo.pTestFunc5=&Foo::testFunc5; foo.pTestFunc5(5); foo.pTestFunc6=&testFunc6; foo.pTestFunc6(6); return 0; }