Derived classes can combine functionality of several base classes simultaneously, by means of multiple inheritance. Trying to achieve the same effect by using single inheritance can be very difficult, to say the least:
class Persistent { //abstract base class used by all persistence-supporting objectspublic: virtual void WriteObject(void *pobj, size_t sz) = 0; virtual void* ReadObject(Archive & ar) = 0;};class Date {/*...*/};class PersistentDate: public Date, public Persistent { /*..*/} //can be stored and retrieved