Declaring Pointers to Data Members

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:

   int * pi; 

you define a pointer to an int member of class A like this:

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

You can initialize a pointer to member:

   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:

   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:

   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:

   class D : public A {};  A* pd = new D;  pd->*pmi = 5; // assign a value of 5 to pd->num
Share the Post:
Share on facebook
Share on twitter
Share on linkedin


Recent Articles: