仮想関数を介してポリモーフィズムを使用します。それが彼らの目的です。
#include <algorithm>
#include <functional>
#include <iostream>
#include <list>
using namespace std;
class A {
public:
  virtual void print() {
    cout << "This is an A object" << endl;
  }
};
class B : public A {
public:
  virtual void print() {
    cout << "This is a B object" << endl;
  }
};
class C : public A {
public:
  virtual void print() {
    cout << "This is a C object" << endl;
  }
};
class D : public B {
  // empty
};
int main() {
  std::list<A*> objects;
  objects.push_back(new A());
  objects.push_back(new B());
  objects.push_back(new C());
  objects.push_back(new D());
  for_each(objects.begin(), objects.end(), mem_fun(&A::print));
  return 0;
}
// outputs:
// This is an A object
// This is a B object
// This is a C object
// This is a B object