הסבר
ברגע שאתה מוסיף במחלקה מסוימת (להלן "מחלקת האב") לפני שם של פונקציה, את המילה VIRTUAL זה אומר שכל מחלקה שתירש מהמחלקה הזאת (להלן "המחלקה הנגזרת") ותהיה לה פונקציה עם אותו שם, אז אם תגדיר פוינטר של "מחלקת האב" אבל תתן לו להצביע על אובייקט מסוג ה"מחלקה הנגזרת", ואז תפעיל את הפונקציה הוירטואלית אז הפונקציה ששייכת לבן תופעל. המימוש של זה מתבצע בעזרת הVTABLE, והVTABLE נוצר, כמו שאמר גל על ידי הקומפיילר לפי הקוד שלך. אם אני לא טועה הפוינטר הזה הוא למעשה פוינטר לפונקציה וכל פעם הוא מפעיל את הפונקציה של המחלקה המתאימה. (אני לא בדיוק יודע איך זה בפועל עובד אולי מישהו יוכל לכתוב פה הסבר יותר מעמיק על זה) אני אתן דוגמא ואולי מישהו ימשיך את ההסבר:
class base { int data; virtual void show() } class derived : public base { void show() } void main { derived obj; base* ptr; ptr=&obj; ptr->show(); }
הפונקציה SHOW שמופעלת פה תהיה זו של המחלקה DERIVED. יאיר