Skip to main content

ฟังก์ชั่นเสมือนคืออะไร?

ฟังก์ชั่นเสมือนเป็นฟังก์ชั่นที่กำหนดไว้ใน superclass ซึ่งจะต้องมีอยู่ในคลาสย่อยสำหรับคลาสย่อยนั้นเพื่อให้มีคำจำกัดความคลาสที่สมบูรณ์ฟังก์ชั่นเสมือนจริงขึ้นอยู่กับกระบวนทัศน์การเขียนโปรแกรมเชิงวัตถุที่เรียกว่าการสืบทอดเสมือนจริงซึ่งมักพบเห็นได้บ่อยที่สุดใน C ++ โดยใช้คำหลักเสมือนจริงในการกำหนดฟังก์ชั่นเสมือนจำเป็นต้องมีสองคลาส Superclass และคลาสย่อยsuperclass เป็นที่ที่มีการประกาศฟังก์ชั่นเป็นครั้งแรกและอาจกำหนดไว้คลาสย่อยคือที่กำหนดฟังก์ชั่น mdash;หรือแทนที่ขึ้นอยู่กับว่าฟังก์ชั่นถูกกำหนดไว้ใน superclass

ฟังก์ชั่นเสมือนสามารถกำหนดได้ในหนึ่งในสองวิธีอันดับแรกมันสามารถกำหนดเป็นต้นขั้วซึ่งมีร่างกายที่ว่างเปล่าและไม่ทำอะไรเลยประการที่สองมันสามารถกำหนดเป็นฟังก์ชั่นเสมือนจริงบริสุทธิ์ซึ่งมันถูกกำหนดเป็น null ในไฟล์ส่วนหัวของ SuperClasss

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

ฟังก์ชั่นเสมือนจริงฟังก์ชั่นเสมือนจริงดังนั้นลำดับชั้นการสืบทอดที่มีมากกว่าสองระดับอาจไม่จำเป็นต้องใช้คำจำกัดความที่ชัดเจนของฟังก์ชั่นเสมือนจริงตัวอย่างเช่นหนึ่งสามารถพิจารณาคลาส A ที่ประกาศฟังก์ชั่นเสมือนจริงซึ่งนำไปใช้ในคลาสย่อย B. คลาส B มีคลาสย่อยของตัวเองคลาส C คลาส C ไม่จำเป็นต้องมีคำจำกัดความที่ชัดเจนของคลาสเป็นฟังก์ชันเพราะมันสืบทอดคำจำกัดความจากคลาส B หากจำเป็นคลาส C สามารถแทนที่ฟังก์ชั่นคลาส BS หรืออาจแทนที่ฟังก์ชั่นคลาส BS ในขณะเดียวกันก็เรียกมัน

ที่อื่น ๆ ฟังก์ชั่นเสมือนจริงไม่จำเป็นต้องกำหนดในคลาสย่อยหากพวกเขาถูกประกาศเสมือนจริงในคลาสย่อยนั้นตัวอย่างเช่นหนึ่งสามารถพิจารณาคลาส A ที่ประกาศฟังก์ชั่นเสมือนจริงและมีสองคลาสย่อย B และ C นอกจากนี้เราสามารถจินตนาการได้ว่าคลาส B มีคลาสย่อย D และ E และคลาสย่อย C มีคลาสย่อย F และ G.

คลาสB ถึง G ทั้งหมดจะต้องมีคลาสตามฟังก์ชั่นเสมือนจริงที่กำหนดไว้อย่างใดหากคลาส B มีการใช้งาน AS ฟังก์ชั่นคลาส D และ E ไม่จำเป็นต้องทำซ้ำบางทีคลาสย่อย CS จำเป็นต้องใช้เป็นฟังก์ชั่น แต่พวกเขาทั้งคู่ทำสิ่งที่แตกต่างดังนั้นการกำหนดฟังก์ชั่นในคลาส C เองจะไม่เป็นประโยชน์ในกรณีนั้นฟังก์ชั่นอาจประกาศเสมือนจริงในคลาส C และไม่จำเป็นต้องใช้งาน

ฟังก์ชั่นเสมือนจริงอาจเป็นเรื่องที่น่ากลัวในการเรียนรู้ แต่เมื่อใช้อย่างถูกต้องพวกเขาสามารถลดการทำซ้ำรหัสและทำให้โค้ดเข้าใจได้ง่ายขึ้นโดยทั่วไปมาก.มีข้อผิดพลาดมากมายที่มีฟังก์ชั่นเสมือนจริงโดยเฉพาะอย่างยิ่งเกี่ยวกับการสืบทอดหลายครั้งในการสืบทอดหลายครั้งมันเป็นไปได้ที่ฟังก์ชั่นเสมือนจริงที่กำหนดไว้อย่างคลุมเครือเพื่อขัดแย้งกันดังนั้นพวกเขาควรใช้ด้วยความระมัดระวังในบริบทนั้น