Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: C++
Expertise: Intermediate
Dec 17, 1999

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
    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
Danny Kalev
Comment and Contribute








