In un senso molto ristretto, la risposta è "Sì": partendo dal presupposto che le tue classi base o interfacce sono progettate per un singolo scopo, ereditandole entrambe crea una classe con più responsabilità. Tuttavia, indipendentemente dal fatto che sia o meno una "cosa negativa", dipende dalla natura delle classi o delle interfacce che stai ereditando.
Puoi suddividere le tue classi e le tue interfacce in due gruppi principali: quelli che affrontano la complessità essenziale del tuo sistema e quelli che affrontano la sua accidentale complessità. Se ereditato da più di una classe di "complessità essenziale", è cattivo; se si eredita da una "essenziale" e una o più classi "accidentali", è OK.
Ad esempio, in un sistema di fatturazione potresti avere classi per rappresentare fatture e cicli di fatturazione (affrontano la complessità essenziale) e classi per oggetti persistenti (affrontano la complessità accidentale). Se erediti in questo modo
class BillingCycleInvoice : public BillingCycle, public Invoice {
};
non è positivo: il tuo BillingCycleInvoice
ha una responsabilità mista in relazione alla complessità essenziale del sistema.
D'altra parte, se erediti in questo modo
class PersistentInvoice : public Invoice, public PersistentObject {
};
la tua classe è OK: tecnicamente, offre due problemi contemporaneamente, ma dal momento che solo uno di essi è essenziale, puoi cancellare ereditando quello accidentale come il "costo di fare affari".