แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | มรดกเดียว | หลายมรดก |
---|---|---|
ขั้นพื้นฐาน | คลาสที่ได้รับสืบทอดคลาสฐานเดียว | คลาสที่ได้รับสืบทอดสืบทอดสองคลาสหรือมากกว่าสองคลาส |
การดำเนินงาน | คลาสที่ได้มา _ คลาส: access_specifier คลาสพื้นฐาน | คลาสที่ได้รับ _class: access_specifier base_class1, access_specifier base_class2, .... |
ทางเข้า | คลาสที่ได้รับเข้าถึงคุณสมบัติของคลาสฐานเดียว | คลาสที่ได้รับเข้าถึงคุณสมบัติที่รวมกันของคลาสฐานที่สืบทอด |
ความชัดเจน | สาธารณะส่วนตัวป้องกัน | สาธารณะส่วนตัวป้องกัน |
ใช้เวลา | ต้องใช้เวลารันเล็กน้อยบนหัว | ต้องการค่าใช้จ่ายรันไทม์เพิ่มเติมเมื่อเปรียบเทียบกับการสืบทอดเดี่ยว |
คำจำกัดความของการสืบทอดเดี่ยว
ในการสืบทอดเดี่ยวมีคลาสฐานเดียวและคลาสที่ได้รับเดียว คลาสที่ได้รับสืบทอดสืบทอดคลาสพื้นฐานทั้งแบบสาธารณะแบบป้องกันและแบบส่วนตัว สมาชิกของคลาสฐานสามารถเข้าถึงได้โดยคลาสที่ได้รับตามตัวระบุการเข้าถึงที่ระบุระหว่างการสืบทอดคลาสฐาน
ลองมาเป็นตัวอย่างในชีวิตจริงเรามีสองคลาสคือ "คลาสบัญชี" และ "คลาสบัญชีออมทรัพย์" “ คลาสบัญชีออมทรัพย์” ที่นี่สามารถสืบทอดคุณสมบัติของ“ คลาสบัญชี” ดังนั้นคลาส“ บัญชีคลาส” จะกลายเป็นคลาสพื้นฐาน / ซุปเปอร์ / พาเรนต์สำหรับการบันทึกคลาสบัญชีและ "คลาสบัญชีออมทรัพย์" จะเป็นคลาสที่ได้รับ
แอตทริบิวต์“ ระดับบัญชี” ที่นี่คือ acc_no (ส่วนตัว) และยอดคงเหลือ (สาธารณะ) และฟังก์ชั่นสมาชิกจะเริ่มต้น (), get_accno () ซึ่งเป็นสาธารณะ ตอนนี้ "คลาสบัญชี" ได้รับการสืบทอดให้เป็น "กลุ่มบัญชีออมทรัพย์" ต่อสาธารณะดังนั้นสมาชิกสาธารณะทั้งหมดของ "กลุ่มบัญชี" สามารถเข้าถึงได้โดยตรงโดย "กลุ่มบัญชีออมทรัพย์" สามารถเข้าถึงสมาชิกส่วนตัวของ“ ระดับบัญชี” ผ่านฟังก์ชั่นสมาชิกสาธารณะของ“ ระดับบัญชี” แต่ไม่สามารถเข้าถึงได้โดยตรง
การใช้งานของมรดกเดียว:
# รวมถึงการใช้พื้นที่ชื่อ std; บัญชีคลาส {int acc_no, ; สาธารณะ: ความสมดุลลอย; โมฆะการเริ่มต้น (int x, int y) {acc_no = x; สมดุล y =; } int get_accno. () {return acc_no; }}; ระดับ Saving_acc: บัญชีสาธารณะ {float intrest_rate; สาธารณะ: // คอนสตรัคของคลาส Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout <คำจำกัดความของมรดกหลายรายการ
การสืบทอดหลายอย่างทำให้คลาสที่ได้รับนั้นได้รับคุณสมบัติที่รวมกันของคลาสพื้นฐานมากกว่าหนึ่งคลาสนั่นคือเรามีคลาสที่ได้รับเพียงครั้งเดียวและคลาสพื้นฐานหลายคลาส ทุกคลาสฐานต้องถูกสืบทอดโดยการระบุตัวระบุการเข้าถึงแยกต่างหากสำหรับแต่ละคลาส คลาสที่ได้รับสามารถเข้าถึงสมาชิกของคลาสฐานตามตัวระบุการเข้าถึงโดยที่คลาสพื้นฐานนั้นได้รับมา
ให้ง่ายขึ้นด้วยตัวอย่างที่เรามีสามคลาสคือ Bike, Car และ Vehicle ตอนนี้ "ยานพาหนะ" สามารถสืบทอดคุณสมบัติของ "จักรยาน" เช่นเดียวกับ "รถยนต์" ดังนั้น "ยานพาหนะ" จะกลายเป็นคลาสที่ได้รับและ "จักรยาน" และ "รถยนต์" กลายเป็นคลาสพื้นฐาน ตอนนี้“ ไบค์” และ“ รถยนต์” ได้รับการสืบทอดต่อสาธารณชนโดย“ ยานพาหนะ” มันสามารถเข้าถึงสมาชิกสาธารณะทั้งหมดของ“ ไบค์” และ“ รถยนต์” แต่เนื่องจากเรามีเอนทิตี Model_no ที่ได้รับการปกป้องใน“ รถยนต์” เพื่อให้เป็นส่วนตัว เข้าถึงได้โดย "ยานพาหนะ"
การใช้งานของหลายมรดก:
# รวมถึงการใช้เนมสเปซ std; คลาสจักรยาน {int engine_cost; ; สาธารณะ: โมฆะ set_engine_cost (int x) {engine_cost = x; }}; รถคลาส {ป้องกัน: int Model_no; สาธารณะ: เป็นโมฆะ set_Model_no (int p) {Model_no = p; }}; คลาส Vehical: จักรยานสาธารณะ, รถสาธารณะ {int no_of_wheels สาธารณะ: vehical (int w) {no_of_wheels = w; ศาล << "ไม่มีล้อ" <ความแตกต่างที่สำคัญระหว่างการสืบทอดเดี่ยวและหลายรายการ
- Single inheritance เป็นคลาสที่สืบทอดมาซึ่งมีคลาสฐานเดียวในขณะที่ในหลาย ๆ มรดกมีคลาสพื้นฐานสองคลาสหรือมากกว่าสองคลาส แต่คลาสที่ได้รับมาเดียว
- การรับมรดกหลายรายการค่อนข้างสับสนเนื่องจากที่นี่คลาสที่ได้รับเดียวได้รับคลาสพื้นฐานสองคลาสขึ้นไป ถ้าคลาสพื้นฐานมีคุณสมบัติหรือฟังก์ชันที่มีชื่อเดียวกันสำหรับคลาสที่ได้รับมันจะยากที่จะระบุว่าคุณลักษณะหรือฟังก์ชันของคลาสฐานนั้นเป็นอะไร
- ปัญหาค่าโสหุ้ยจะน้อยกว่าในกรณีที่มีการสืบทอดเดี่ยว แต่ในกรณีที่มีการสืบทอดหลายครั้งการสร้างหรือทำลายวัตถุจะเรียกตัวสร้างและตัวทำลายของคลาสแม่ในลำดับชั้นของคลาสที่เพิ่มค่าใช้จ่าย
- การสืบทอดเดี่ยวเป็นมากกว่าความเชี่ยวชาญ ในขณะที่การสืบทอดหลายรายการมีต่อลักษณะทั่วไปมากขึ้น
- เนื่องจากการสืบทอดเดี่ยวมีค่าใช้จ่ายน้อยกว่าจึงมีเวลารันไทม์น้อยลงเมื่อเปรียบเทียบกับการสืบทอดหลายรายการ
ข้อสรุป
การสืบทอดทำให้การทำงานของโปรแกรมเมอร์เป็นเรื่องง่ายราวกับว่าคลาสหนึ่งถูกสร้างขึ้นแล้วคุณสมบัติของมันสามารถปรับเปลี่ยนได้โดยคนอื่นถ้าจำเป็น แม้ว่าตัวระบุการเข้าถึงจะ จำกัด การเข้าถึงสมาชิกของคลาสพื้นฐานในวิธีที่แน่นอน แต่จะทำให้ข้อมูลปลอดภัยยิ่งขึ้น การสืบทอดแบบครั้งเดียวนั้นง่ายกว่าและง่ายต่อการปรับใช้มากกว่าการสืบทอดหลายทาง การสืบทอดลดขนาดของรหัสวัตถุ แต่ยังส่งผลกระทบต่อเวลาทำงานของโปรแกรม