בעיית היהלום
יש לך מחלקה A, היא מגדירה פונק' וירטואלית טהורה שנקראת print. יש לך מחלקה B שיורשת מ-A, היא מממשת את print בצורה מסוימת (גם היא וירטואלית) יש לך מחלקה C שיורשת מ-A, גם היא מממשת את print בצורה מסוימת (צורה אחרת מ-B). עכשיו אני רוצה לרשת התנהגות גם מ-B וגם מ-C למחלקה חדשה שנקרא לה D. יש לקומפיילר (ולי) בעיה בקריאה לפונק' print. צריך להגיד לו ספציפית בכל קריאה ל-print לאיזו גרסא אני רוצה לקרוא (של B או של C). כל הרעיון הזה נוגד את רעיון ה-object oriented. ותתפלא, הדברים האלה קורים יופי, אולי לא בפשטות כמו שתיארתי אבל קורים.