Skip to main content

มรดกเสมือนคืออะไร?

มรดกเสมือนเป็นประเภทของการสืบทอดที่การใช้งานของ superclass ไม่สมบูรณ์และจำเป็นต้องมีคลาสย่อยสำหรับคำจำกัดความที่สมบูรณ์ของวัตถุการสืบทอดประเภทนี้สามารถใช้ร่วมกับการสืบทอดทั้งแบบเดี่ยวและหลายครั้ง แต่มักใช้กันมากที่สุดในการสืบทอดหลายครั้งคลาสใด ๆ ที่สืบทอดมาจากคลาสฐานเสมือนจะกลายเป็นคลาสย่อยโดยตรงของคลาสฐานนั้นคลาสฐานเสมือนอาจพึ่งพาคลาสย่อยเพื่อใช้วิธีการทั้งหมด แต่นี่ไม่ใช่ข้อกำหนด

C ++ เป็นภาษาคอมพิวเตอร์ที่รู้จักกันมากที่สุดในการใช้มรดกเสมือนในการประกาศการสืบทอดเสมือนจริงใน C ++ จะใช้คำหลักเสมือนจริงทั้ง superclass และ subclass ต้องประกาศวิธีการเสมือนจริงด้วยคำหลักเสมือนสิ่งนี้จะบอกคอมไพเลอร์ C ++ ว่าซูเปอร์คลาสไม่สมบูรณ์และจะต้องได้รับข้อมูลจากคลาสย่อยเพื่อให้เสร็จสมบูรณ์การใช้ subclass เพื่อให้ SuperClass เสร็จสมบูรณ์ไม่ได้หมายความว่า subclasses จะเขียนทับกันหากพวกเขามีคลาสฐานเดียวกันและแทนที่คอมไพเลอร์ C ++ จะดูแลการพิจารณาว่าชิ้นส่วนใดกับแต่ละวัตถุ

เนื่องจากคลาสฐานเสมือนจริงสำหรับเสมือนจริงการสืบทอดฟังก์ชั่นทั่วโลกใน C ++ ไม่สามารถประกาศเสมือนได้ประเภทการสืบทอดนี้สามารถใช้ได้เฉพาะเมื่อยึดติดกับหลักการการเขียนโปรแกรมเชิงวัตถุ (OOP)เหตุผลนี้คือฟังก์ชั่นระดับโลกไม่เกี่ยวข้องกับคลาสเฉพาะและมักจะอยู่ในตัวเองด้วยตนเองหากไม่มีการสืบทอด superclass และ subclass ไม่สามารถเกิดขึ้นได้ดังนั้นฟังก์ชั่นทั่วโลกและการสืบทอดเสมือนจะเป็นเอกสิทธิ์เฉพาะบุคคลในทางทฤษฎีฟังก์ชั่นสามารถใช้ในฟังก์ชั่นเสมือนจริงได้ แต่สิ่งที่ตรงกันข้ามอาจไม่ได้ผลเสมอไป

การสืบทอดเสมือนจริงใช้ในการแก้ปัญหาการเขียนโปรแกรมจำนวนมากและหนึ่งในสิ่งที่มีประโยชน์ที่สุดคือการแก้ปัญหาความคลุมเครือในการสืบทอดหลายครั้งหนึ่งอาจมีคลาส A พื้นฐานที่มีสองคลาสย่อย B และ C และจากนั้นคลาส D ที่สืบทอดมาจากทั้งคลาส B และ C รูปแบบนี้เรียกว่าเพชรแห่งความตายเพราะถ้าคลาส A, B, B,และ C ทั้งหมดมีการใช้งานของวิธีเดียวกันมันไม่สามารถทำได้สำหรับคลาส D เพื่อพิจารณาว่าการใช้งานใดที่ควรใช้การสืบทอดเสมือนจริงแก้ปัญหานี้เนื่องจากการใช้งานแต่ละคลาสยังคงแตกต่างกันและไม่คลุมเครือความแตกต่างนี้ได้รับการจัดการโดยวัตถุภายในพิเศษที่เรียกว่าตารางเสมือน (VTables) ที่ติดตามของแต่ละประเภทวัตถุ แต่ตารางเหล่านี้ไม่จำเป็นต้องจัดการอย่างชัดเจนโดยโปรแกรมเมอร์เพราะพวกเขาถูกสร้างขึ้นในภาษา