Example 1: (a) Sending messages in Objective C; (b) specifying the selector at run-time. (a) [myButton setName: "Ok"]; [myButton setSizeDx: 100 dy: 20]; [[myDialog getButton: "Ok"] disable]; (b) SEL action = @selector (setName:); [myButton perform: action with: "Ok"]; // ...which is the same as: __msg (myButton, action, "Ok"); Example 2: class Base { public virtual void Foo (); }; void Base::Foo () { printf ("Base::Foo\n"); } class Other : Base { public virtual void Foo (); }; void Other::Foo () { printf ("Other::Foo\n"); } void test (Base* object) { object->Foo (); } void main () { Base base; Other other; test (&base); // prints "Base::Foo" test (&other); // prints "Other::Foo" } Example 3: (a) typedef void (Base* object) void test (Base* object) { PtrMember ptr = Base::Foo; (object->*ptr) (); // calls object->Foo () } (b) class A { /* ... */ }; class B { /* ... */ }; typedef void (A::*PtrAMember)(); typedef void (B::*PtrBMember)(); void test (A* a, B* b, PtrAMember pa) { PtrBMember pb = (PtrBMember)(pa); // cast error (a->*pa) (); (b->*pa) (); // error. bad base class (b->*pb) (); }