int main() { A* obj = jnew D(); obj->foo(); B* b = dynamic_cast<B*>(obj); b->foo(); D* d = dynamic_cast<D*>(obj); d->foo(); t1.Listen(&t3); t2.Listen(&t3); JOrderedSetT::Sorted msg; t3.Bcast(msg); Test* t4 = &t1; std::cout << t4 << std::endl; clearPointer((void*) &t4); std::cout << t4 << std::endl; return 0; }