Inheritance class BuzzerAlarm : public Alarm { ... }; Don't pass base class objects by value: void activate(Alarm a) The copying causes slicing Pass (const) reference instead: void activate(Alarm& a) void activate(const Alarm& a)