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.