-
成員變量指針
1)定義
類型 類名::*成員指針變量名 = &類名::成員變量;
2)使用
對象.成員指針變量名;
注:"."被稱為直接成員指針解引用操作符
對象指針->*成員指針變量名;
注:"->*"被稱為間接成員指針解引用操作符
#include <iostream> #include <cstdio> using namespace std; class Student{ public: Student(const string& name):m_name(name){} int m_age; string m_name; }; int main(void){ //成員變量指針 string Student::*pname = &Student::m_name; Student s("張飛"); Student* ps = new Student("趙雲"); cout << s.*pname << endl;//.* ->*不可用空格分隔 cout << ps->*pname << endl; //實際上就是某個字段在該類的對象中的偏移量,即相對位置 //成員變量位址=對象位址+成員變量指針相對位址 printf("pname=%p\n",pname); printf("&s=%p\n",&s); printf("&s.m_name=%p\n",&s.m_name); return 0; }
-
成員函數指針
1)定義
傳回類型 (類名::*成員函數指針)(參數表)=&類名::成員函數;
2)使用
(對象.*成員函數指針)(實參表);
(對象指針->*成員函數指針)(實參表);
#include <iostream> using namespace std; class A{ public: void func1(void){ cout << "A::func1" << endl; } void func2(void){ cout << "A::func2" << endl; } }; int main(void){ void (A::*pfunc)(void) = &A::func1; A a; A* pa = new A; (a.*pfunc)(); (pa->*pfunc)(); pfunc = &A::func2; (a.*pfunc)(); (pa->*pfunc)(); return 0; }