Im engeren Sinne lautet die Antwort "Ja": Unter der Annahme, dass Ihre Basisklassen oder Schnittstellen für einen einzigen Zweck konzipiert sind, wird durch die Übernahme beider Klassen eine Klasse mit mehreren Verantwortlichkeiten erstellt. Ob dies jedoch "eine schlechte Sache" ist oder nicht, hängt von der Art der Klassen oder Schnittstellen ab, die Sie erben.
Sie können Ihre Klassen und Interfaces in zwei Hauptgruppen unterteilen - die, die sich mit der wesentlichen Komplexität Ihres Systems befassen, und die, die sich mit seiner zufälligen Komplexität befassen. Wenn Sie von mehr als einer Klasse der "wesentlichen Komplexität" erben, ist dies schlecht. Wenn Sie von einer "wesentlichen" und einer oder mehreren "zufälligen" Klassen erben, ist dies in Ordnung.
In einem Abrechnungssystem können Sie beispielsweise Klassen für die Darstellung von Rechnungen und Abrechnungszyklen (die sich mit der wesentlichen Komplexität befassen) und Klassen für dauerhafte Objekte (die sich mit der zufälligen Komplexität befassen) verwenden. Wenn Sie so erben
class BillingCycleInvoice : public BillingCycle, public Invoice {
};
Es ist schlimm: Sie BillingCycleInvoice
haben eine gemischte Verantwortung in Bezug auf die wesentliche Komplexität des Systems.
Auf der anderen Seite, wenn Sie so erben
class PersistentInvoice : public Invoice, public PersistentObject {
};
Ihre Klasse ist in Ordnung: Technisch gesehen werden zwei Probleme gleichzeitig behandelt. Da jedoch nur eines von ihnen von entscheidender Bedeutung ist, können Sie das Erben des Versehens als "Geschäftskosten" abschreiben.