virtual
ฟังก์ชั่นที่บริสุทธิ์จะต้องดำเนินการในประเภทที่ได้รับที่จะเป็นอินสแตนซ์โดยตรง แต่ประเภทฐานยังสามารถกำหนดการดำเนินการ คลาสที่ได้รับสามารถเรียกการใช้คลาสพื้นฐานได้อย่างชัดเจน (หากสิทธิ์การอนุญาตอนุญาต) โดยใช้ชื่อที่มีการกำหนดขอบเขตเต็ม (โดยการโทรA::f()
ในตัวอย่างของคุณ - ถ้าA::f()
มีpublic
หรือprotected
) สิ่งที่ต้องการ:
class B : public A {
virtual void f() {
// class B doesn't have anything special to do for f()
// so we'll call A's
// note that A's declaration of f() would have to be public
// or protected to avoid a compile time problem
A::f();
}
};
กรณีการใช้งานที่ฉันนึกได้ว่าอยู่ด้านบนของหัวของฉันคือเมื่อมีพฤติกรรมเริ่มต้นที่สมเหตุสมผลมากขึ้นหรือน้อยลง แต่ผู้ออกแบบชั้นเรียนต้องการให้มีการเรียกใช้ลักษณะการเรียงลำดับเริ่มต้นอย่างชัดเจนเท่านั้น อาจเป็นกรณีที่คุณต้องการให้คลาสที่ได้รับมาเพื่อทำงานของตนเองเสมอ แต่ยังสามารถเรียกใช้ชุดการทำงานทั่วไปได้
โปรดทราบว่าแม้ว่ามันจะได้รับอนุญาตจากภาษา แต่ก็ไม่ใช่สิ่งที่ฉันเห็นโดยทั่วไปที่ใช้ (และความจริงที่ว่ามันสามารถทำได้ดูเหมือนจะแปลกใจที่โปรแกรมเมอร์ C ++ ส่วนใหญ่แม้แต่คนที่มีประสบการณ์)
deported
เพียวนิยามวิธีเสมือนต้อง (ใน. inl หรือ. cpp เพื่ออ้างถึงวิธีปฏิบัติในการตั้งชื่อไฟล์ทั่วไป)