// Example 6-9: Using a pointer-to-member.
#include <iostream>
#include <ostream>

class base {
public:
  base(int i) : x_(i) {}
  virtual ~base() {}
  virtual void func() { std::cout << "base::func()\n"; }
private:
  int x_;
};

class derived : public base {
public:
  derived(int i) : base(i) {}
  virtual void func() { std::cout << "derived::func()\n"; }
};

int main()
{
  base *b = new derived(42);
  void (base::*fp)() = &base::func;
  (b->*fp)();                      // prints derived::func()
}
