Although the syntax of pointers to members may seem a bit confusing at first, it is consistent and resembles the form of ordinary pointers, with the addition of the class name followed by the operator :: before the asterisk. For example, if an ordinary pointer to int looks like this:



Code:
 int * pi;
you define a pointer to an int member of class A like this:


Code:
class A{/**/};
  int A::*pmi; // pmi is a pointer to an int  member of A
You can initialize a pointer to member:


Code:
class A
  {
  public:
    int num;
    int x;
  };
  int A::*pmi = &A::num; // 1
The statement numbered 1 defines a pointer to an int member of class A and initializes it with the address of the member num. Now you can use the pointer pmi to examine and modify the value of num in any object of class A:


Code:
A a1;
  A a2;
  int n = a1.*pmi; // copy the value of a1.num to n
  a1.*pmi = 5; // assign the value 5 to a1.num 
  a2.*pmi = 6; // assign the value 6 to a2.num
Similarly, you can access a data member through a pointer to A:


Code:
A * pa = new A;
  int n = pa->*pmi; // assign to n the value of pa->num 
  pa->*pmi = 5; // assign the value 5 to pa->num
Or using a pointer to an object derived from A:


Code:
class D : public A {};
  A* pd = new D;
  pd->*pmi = 5; // assign a value of 5 to pd->num