Dalam arti yang sangat sempit, jawabannya adalah "Ya": dengan asumsi bahwa kelas dasar atau antarmuka Anda dirancang untuk satu tujuan, mewarisi keduanya menciptakan kelas dengan banyak tanggung jawab. Namun, apakah itu "hal buruk" tergantung pada sifat dari kelas atau antarmuka yang Anda warisi.
Anda dapat mempartisi kelas dan antarmuka Anda menjadi dua kelompok besar - yang membahas kompleksitas esensial sistem Anda, dan yang membahas kompleksitas yang tidak disengaja. Jika mewarisi dari lebih dari satu kelas "kompleksitas esensial", itu buruk; jika Anda mewarisi dari satu kelas "esensial" dan satu atau lebih "tidak disengaja", tidak apa-apa.
Misalnya, dalam sistem penagihan, Anda dapat memiliki kelas untuk mewakili faktur dan siklus penagihan (mereka mengatasi kompleksitas esensial) dan kelas untuk objek yang bertahan lama (mereka membahas kompleksitas yang tidak disengaja). Jika Anda mewarisi seperti ini
class BillingCycleInvoice : public BillingCycle, public Invoice {
};
itu buruk: Anda BillingCycleInvoice
memiliki tanggung jawab yang beragam karena berkaitan dengan kompleksitas esensial dari sistem.
Di sisi lain, jika Anda mewarisi seperti ini
class PersistentInvoice : public Invoice, public PersistentObject {
};
kelas Anda OK: secara teknis, ini melayani dua masalah sekaligus, tetapi karena hanya satu di antaranya yang penting, Anda dapat menghapus warisan yang tidak disengaja sebagai "biaya berbisnis".