ในความหมายที่แคบมากคำตอบคือ "ใช่": สมมติว่าคลาสพื้นฐานหรืออินเทอร์เฟซของคุณได้รับการออกแบบมาเพื่อจุดประสงค์เดียวโดยที่การสืบทอดทั้งสองจะสร้างคลาสที่มีความรับผิดชอบหลายอย่าง อย่างไรก็ตามไม่ว่าจะเป็น "สิ่งที่ไม่ดี" หรือไม่นั้นขึ้นอยู่กับลักษณะของคลาสหรืออินเทอร์เฟซที่คุณกำลังสืบทอด
คุณสามารถแบ่งคลาสและอินเทอร์เฟซของคุณออกเป็นสองกลุ่มหลัก - กลุ่มที่จัดการกับความซับซ้อนที่สำคัญของระบบของคุณและกลุ่มที่จัดการกับความซับซ้อนโดยไม่ตั้งใจ หากสืบทอดจากคลาส "ความซับซ้อนที่จำเป็น" มากกว่าหนึ่งคลาสมันจะไม่ดี หากคุณสืบทอดจากคลาส "จำเป็น" และคลาส "ตั้งใจ" หนึ่งคลาสหรือมากกว่านั้นก็ถือว่าใช้ได้
ตัวอย่างเช่นในระบบการเรียกเก็บเงินคุณสามารถมีคลาสสำหรับการแสดงใบแจ้งหนี้และรอบการเรียกเก็บเงิน (พวกเขาจัดการกับความซับซ้อนที่จำเป็น) และคลาสสำหรับวัตถุที่ยังคงอยู่ (พวกเขาจัดการกับความซับซ้อนโดยไม่ได้ตั้งใจ) ถ้าคุณสืบทอดเช่นนี้
class BillingCycleInvoice : public BillingCycle, public Invoice {
};
มันไม่ดี: คุณBillingCycleInvoice
มีความรับผิดชอบที่หลากหลายเนื่องจากเกี่ยวข้องกับความซับซ้อนที่สำคัญของระบบ
ในทางกลับกันถ้าคุณสืบทอดเช่นนี้
class PersistentInvoice : public Invoice, public PersistentObject {
};
ชั้นเรียนของคุณนั้นโอเค: โดยทางเทคนิคแล้วมันให้บริการข้อกังวลสองข้อพร้อมกัน แต่เนื่องจากมีเพียงสิ่งเดียวเท่านั้นที่มีความสำคัญคุณจึงสามารถเขียนการสืบทอดสิ่งที่เกิดขึ้นโดยบังเอิญเป็น "ต้นทุนในการทำธุรกิจ"