Virtual methods void activate(Alarm& a) { a.turn_on(); } BuzzerAlarm b; activate(b); If turn_on() is not virtual: Calls turn_on() in Alarm If turn_on() is virtual: Calls turn_on() in BuzzerAlarm Virtual methods require virtual destructor