Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


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

Declaring Pointers to Member Functions

Pointers to member functions consists of the member function's return type, the class name followed by ::, the pointer's name, and the function's parameter list. For example, a pointer to a member function of class A that returns int and takes no arguments is defined like this (note that both pairs of parentheses are mandatory):

 

  class A  {
  public:
    int func ();  
  };

  int (A::*pmf) (); /* pmf is a pointer to some member 
  function of class A that returns int  and takes no 
  arguments*/

In fact, a pointer to a member functions looks just like an ordinary pointer to function, except that it also contains the class's name immediately followed by the :: operator. You can invoke the member function to which pmf points like this:

 
  pmf = &A::func; //assign pmf
  A a;
  A *pa = &a;
  (a.*pmf)();  // invoke a.func() 
// call through a pointer to an object
  (pa->*pmf)();  // calls pa->func()

Pointers to member functions respect polymorphism. Thus, if you call a virtual member function through a pointer to member, the call will be resolved dynamically:

 
  class Base{
  public:
    virtual int f (int n);
  };
  class Derived : public Base {
  public:
    int f (int h); //override
  };

  Base *pb = new Derived;
  int (Base::*pmf)(int) = &Base::f;
  (pb->*pmf)(5); // call resolved as D::f(5);

Note that you cannot take the address of a class's constructor(s) and destructor.

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap